找出没有出现过的数
来源:互联网 发布:python串口编程实例 编辑:程序博客网 时间:2024/04/30 12:30
Find All Numbers Disappeared in an Array
描述:
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements of [1, n] inclusive that do not appear in this array.
Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.
Example:
Input:
[4,3,2,7,8,2,3,1]
Output:
[5,6]
翻译:
给一个长度为n的数组,内部的元素的大小在n之间。有些元素出现过一次,有些元素出现过两次。
找到所有的在这个数组中没有出现过的元素。
小要求:能不能不花费额外的内存空间,并且使她的时间复杂度使O(n).返回的结果集合不算在额外的空间内
解题思路:
题目要求不使用额外的内存 空间,并且时间复杂度为O(n)
那么首先就不能通过创建一个空的长度为n的数组来保存没有出现过的数
那这该怎么做呢?只能在当前数组上,让它自己保存没有出现过的数。
我们可以想到,由于数组长度为n,并且1<=nums[i]<=n,因此,(nums[i]-1)刚好可以做为数组的下标。为了记录数字是否出现过,我们可以把(nums[i]-1)的位置的数字置为相反数,也就是说nums[abs(nums[i]) - 1] = -abs(nums[abs(nums[i]) - 1]);
最后我们再循环遍历一次集合nums,如果有位置的数还是正数,就证明当前位置(index)对应的数字(index+1)是没有出现过的。
上代码:
public class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { List<Integer> rst = new ArrayList<>(); int size = nums.length; int targetIndex; for (int i=0; i<size; i++){ targetIndex = Math.abs(nums[i]) - 1;// 取得当前数字对应的数组的下标 nums[targetIndex] = -Math.abs(nums[targetIndex]);// 做取反操作 } for (int i=0; i<size; i++) { if (nums[i] > 0){ rst.add(i + 1); } } return rst; }}
- 找出没有出现过的数
- 找出一个数组中没重复出现过的数
- 数组中除了两个数只出现过一次,其他的均出现过两次,请找出这两个只出现过一次的数
- 数组中除了三个数只出现过一次,其他的均出现过两次,请找出这三个只出现过一次的数
- 数组中除了两个数只出现过一次,其他的均出现过两次,请找出这两个只出现过一次的数
- 剑指offer----找出数组中出现过1次的两个数
- 给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来
- 第三题,给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来。
- 找出只出现过一次的字母
- 找出一个数组中唯一没有成对出现的两个数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数
- 序列中只有一个数出现了一次,其他均出现了两次,找出只出现过一次的这个数
- hubot安装初探
- 获取Linux系统short、int、long等各种数值类型最大最小值
- C语言——关于字符相同,删除字符的代码
- Android Application类的使用
- 性能调优笔记
- 找出没有出现过的数
- 使用python内建asyncore编写socket client
- require/require_once/include/include_once区别
- C语言——野指针
- 汉字编码及区位码查询算法
- Unicode数据类型(与ANSI关系和相互转化)
- C语言——关于指针传递指针
- 24小时值守F&Q
- 关于bootstrap".container"容器默认的before与after样式效果作用