【剑指Offer-】数组中重复的数字
2018-01-26 15:14
357 查看
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。算法分析
这是一个数组问题,题目也要求输出第一个重复的数字,因而我们不妨用冒泡排序的思想,从第一个开始检查,当遇到重复的数字时就停止检查,并保存该数字。算法实现
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) { if(length <= 1){ return false; } for(int i = 0; i < length - 1; i++ ){ for(int j = i + 1; j < length; j ++){ if(numbers[i] == numbers[j]){ duplication[0] = numbers[i]; return true; } } } return false; } }
算法优化
利用冒泡排序的思想虽然可以解决,但是时间复杂度较高为O(n^2),我们可以考虑借助一个辅助数组,由于数字的取值范围是0-n-1,因而我们可以对每个出现的数字进行标记,这样在遍历时检查标记即可实现获取第一个重复数字的需求。其时间复杂度为O(n),空间复杂度为O(n)。优化实现
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) { if(length <= 1){ return false; } boolean[] tag = new boolean[length]; for(int i = 0; i < length; i ++){ if(tag[numbers[i]] == true){ duplication[0] = numbers[i]; return true; } tag[numbers[i]] = true; } return false; } }
相关文章推荐
- 剑指offer—数组中重复的数字
- 剑指Offer-面试题3 数组中重复的数字
- 剑指offer——面试题3:找出数组中重复的数字
- [剑指Offer]数组中重复的数字
- 剑指offer 面试题51 数组中重复的数字
- 剑指offer-数组中重复的数字
- 剑指Offer面试题51:数组中的重复数字
- 剑指offer(53):数组中重复的数字
- 剑指offer面试题51 数组中重复的数字
- 剑指offer 数组中重复的数字
- 剑指offer-数组中重复的数字
- 剑指offer题解 数组中重复的数字
- 剑指offer 面试题3:数组中重复的数字
- 剑指offer 编程题(49):数组中重复的数字
- [剑指offer]数组中重复的数字
- 剑指offer--数组中重复的数字
- 剑指Offer 51数组中的重复数字 Java版
- 剑指Offer--051-数组中重复的数字
- 【剑指offer】面试题3:数组中重复的数字
- 【剑指Offer学习】【面试题51:数组中重复的数字】