3、数组中重复的数字
2018-03-30 19:39
204 查看
1、利用哈希表,时间为O(n),但是牺牲了O(n)的空间
2、修改原数组,时间为O(n),空间为O(0)
3、不修改数组,时间复杂度为nlog(n),空间复杂度为1
2、修改原数组,时间为O(n),空间为O(0)
public class Solution { // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation; // Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++ // 这里要特别注意~返回任意重复的一个,赋值duplication[0] // Return value: true if the input is valid, and there are some duplications in the array number // otherwise false public boolean duplicate(int numbers[],int length,int [] duplication) { for(int i=0;i<length;i++) { while(numbers[i]!=i) { if(numbers[i]==numbers[numbers[i]]) { duplication[0] = numbers[i]; return true; } swap(numbers,i,numbers[i]); } } return false; } public void swap(int[] numbers,int num1,int num2) { int a=numbers[num1]; numbers[num1]=numbers[num2]; numbers[num2]=a; } }
3、不修改数组,时间复杂度为nlog(n),空间复杂度为1
相关文章推荐
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 删除排序数组中的重复数字 II
- 数组中重复的数字
- LintCode-删除排序数组中的重复数字
- LintCode【简单】100. 删除排序数组中的重复数字。代码及思路
- 数组中重复的数字
- 把一个整形数组中重复的数字去掉 - 微软面试题
- 已知一个数组int[98],该数组里面存储了0~99共100个数字中的98个,数字不重复,请用算法算出0~99中缺少的2个数字是哪两个?
- 向一个容量为100的数组中随机的插入1-100中的数,并且数字不能重复
- 利用位运算判断数组中是否有重复的数字
- Lintcode——100. 删除排序数组中的重复数字
- 51-数组中重复的数字
- js去除数组中重复的数字
- 使用数组作为返回类型,返回不重复的随机数字
- (剑指Offer)面试题51:数组中重复的数字
- 数组------数组中的重复数字
- 【刷题之路】数组中重复的数字
- 判断数组中是否有重复数字(two ways +位运算)
- 找出数组中重复的数字
- leetcode 217 Contains Duplicate 数组中是否有重复的数字