50、数组中重复的数字
2018-02-13 22:56
155 查看
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
思路:两种方法:
1、用到辅助空间,空间复杂度为O(n)。
2、利用题中数组的特点(数组中的元素小于数组长度),优点是空间复杂度为O(1),缺点是会改变原数组。
方法一
方法二
思路:两种方法:
1、用到辅助空间,空间复杂度为O(n)。
2、利用题中数组的特点(数组中的元素小于数组长度),优点是空间复杂度为O(1),缺点是会改变原数组。
方法一
public boolean duplicate(int numbers[],int length,int [] duplication) { if(length <= 0) return false; HashSet<Integer> hashSet = new HashSet<>(); for (int i = 0; i < length; i++) { if (!hashSet.add(numbers[i])) { duplication[0] = numbers[i]; return true; } } return false; }
方法二
public boolean duplicate(int numbers[],int length,int [] duplication) { if(length <= 0) return false; for (int i = 0; i < length; i++) { int index = Math.abs(numbers[i]); if (numbers[index] < 0) { duplication[0] = index; return true; } numbers[index] = 0 - numbers[index]; } return false; }
相关文章推荐
- (C++)剑指offer-50:数组中重复的数字(数组)
- 【50】数组中重复的数字
- 50、数组中重复的数字
- 剑指Offer_50_数组中重复的数字
- 剑指Offer—50—数组中重复的数字
- 50数组中重复的数字
- 数组中重复的数字
- 删除排序数组中的重复数字-LintCode
- javascript 校验字符串(数字)数组是否存在重复元素
- 剑指offer 51 数组中重复的数字
- 剑指offer:找出数组中重复的数字
- 数组中重复的数字
- LintCode(101)删除排序数组中的重复数字 II
- 面试题51:数组中重复的数字
- 数组中重复的数字
- 数据结构与算法分析笔记与总结(java实现)--数组8:数组中重复的数字
- 【刷题之路】数组中重复的数字
- 数组中重复的数字
- ASP 无重复数字随机函数, 数组实现, 并应用于随机显示记录集 By shawl.qiu
- 100 删除排序数组中的重复数字