当前位置: 首页 > news >正文

leetcode day7 442

442 数组重复出现的数据

给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 最多两次 。请你找出所有出现 两次 的整数,并以数组形式返回。

你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间(不包括存储输出所需的空间)的算法解决此问题。

示例 1:

输入:nums = [4,3,2,7,8,2,3,1]
输出:[2,3]
示例 2:

输入:nums = [1,1,2]
输出:[1]
示例 3:

输入:nums = [1]
输出:[]
 

解题思路:将元素交换到对应的位置。

将数 i 放在数组中下标为 i−1 的位置:

(1)如果 i 恰好出现了一次,那么将 i 放在数组中下标为 i−1 的位置即可;
(2)如果 i 出现了两次,将另一个 i 放置在任意不冲突的位置 j,数 j+1 没有在数组中出现过。
如果 nums[i]−1!=i,说明 nums[i] 出现了两次(另一次出现在位置 num[i]−1)

放置的方法:对数组进行一次遍历。当遍历到位置 i 时,nums[i] 应该被放在位置 nums[i]−1。不满足交换 num[i] 和 nums[nums[i]−1] 即可,直到待交换的两个元素相等为止。

int* findDuplicates(int* nums, int numsSize, int* returnSize) {int *a=(int*)malloc(sizeof(int)*numsSize);*returnSize=0;for(int i=0;i<numsSize;i++){while(nums[i]!=nums[nums[i]-1]){int t=nums[i];nums[i]=nums[t-1];nums[t-1]=t;}}for(int i;i<numsSize;i++){if(nums[i]-1!=i){a[(*returnSize)++]=nums[i];}}return a;
}

本题如果不要求使用常量额外空间,我们可以简单的遍历数组,并使用哈希表存储每个正整数然后再找出出现两次的数。

int* findDuplicates(int* nums, int numsSize, int* returnSize) {int *a=(int*)malloc(sizeof(int)*numsSize);int b[100005]={},k=0;*returnSize=0;for(int i=0;i<numsSize;i++){b[nums[i]]++;if( b[nums[i]]==2){a[k]=nums[i];k++;}}*returnSize=k;return a;
}

http://www.mrgr.cn/news/59992.html

相关文章:

  • vue写个表格,让它滚动起来,没有用datav,有的时候结合会出错,一种简单的方法,直接用animation
  • Linux - 文件描述符 | 文件系统 | 软硬链接
  • ABC376
  • 【 IC每日一题】
  • 【LeetCode:263. 丑数 + 数学】
  • 题目训练(字节青训)
  • 揭秘:如何用Puppeteer和BrowserWS解锁网站性能的隐秘角落
  • 【CTF】 文件包含漏洞——data伪协议 【详】
  • python之多任务爬虫——线程、进程、协程的介绍与使用(16)
  • C++20新特性探索:概念(Concepts)与范围库(Ranges)
  • 特定机器学习问题的基准测试数据
  • 【Vue3】第二篇
  • 15-5小C的外卖超时判断
  • 单例模式 — 设计模式
  • 【工程】mmcls中EfficientNet网络转onnx格式问题记录
  • 最近阶段的状态的复盘
  • 32位的ARMlinux的4字节变量原子访问问题
  • Vue2自定义指令及插槽
  • MySQL主主SQL线程异常修复大作战,一失足成千古恨啊!
  • 四期书生大模型实战营(【入门岛】- 第4关 | 玩转HF/魔搭/魔乐社区)
  • P11232 [CSP-S 2024] 超速检测(民间数据)
  • 【热门主题】000010 深入 Vue.js 组件开发
  • 【办公类-53-14】2024年9月周计划系列优化(5天、6天、7天模版)
  • vue3 debounce 作用:函数会从其被调用时延迟执行到调用结束的这段时间内,如果该函数被再次调用,则重新计算时间。
  • 使用 BERT 和逻辑回归进行文本分类及示例验证
  • 在数据库访问中,使用localhost、127.0.0.1和IP地址有什么差异