标题面试题03:找出数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
//一般思路:先将数组进行从小到大排序,如果没有元素重复,那么每个元素和它的下标应该相同,不过可以在搜索便利的时候就完成排序
/*
具体做法:对数组中的每个元素进行遍历,如果该处的元素不等于该处的下标,那么
如果该处的元素与下标值为该元素的元素相同,则该元素为重复元素
如果该处的元素与下标值为该元素的元素不相同,则两者交换
例如:
输入
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
``
public class Solution {
public int findRepeatNumber(int[] nums)
{
int t=0;
for(int i=0;i<nums.length;i++)
{
if(i!=nums[i])
{
if(nums[i]==nums[nums[i]])
// System.out.print(nums[i]+" ");
return nums[i];
else
{
t=nums[i];
nums[i]=nums[nums[i]];
nums[t]=t;
}
}
}
return 0;
}
public static void main(String[] args)
{
Solution ss=new Solution();
int[] nums={2, 3, 1, 0, 2, 5, 3};
ss.findRepeatNumber(nums);
}
}
时间复杂度为O(n)
- 执行用时 :1 ms, 在所有 Java 提交中击败了94.14%的用户
内存消耗 :58.6 MB, 在所有 Java 提交中击败了100.00%的用户