数组找相同

标题面试题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%的用户
发布了16 篇原创文章 · 获赞 1 · 访问量 1263

猜你喜欢

转载自blog.csdn.net/cf1169983240/article/details/104319189
今日推荐