美文网首页
剑指offer03

剑指offer03

作者: BaekCho | 来源:发表于2020-06-26 12:23 被阅读0次

    题目描述
    找出数组中重复的数字。
    在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
    示例 1:
    输入:
    [2, 3, 1, 0, 2, 5, 3]
    输出:2 或 3

    方法一

    class Solution {
        public int findRepeatNumber(int[] nums) {
            Set<Integer> set = new HashSet<Integer>();
            int repeat = -1;
            for (int num : nums) {
                if (!set.add(num)) {
                    repeat = num;
                    break;
                }
            }
            return repeat;
        }
    }
    
    

    方法二

    class Solution {
        public int findRepeatNumber(int[] nums) {
           if(nums.length <=0){
               return -1;
           }
           int x;
           for(int i=0; i<nums.length; i++){
               while(nums[i]!=i){
                   if(nums[i]==nums[nums[i]]){
                       return nums[i];
                       }
                  int temp=nums[i];
                   nums[i]=nums[temp];
                   nums[temp]=temp;
               }
           }  
           return -1;    
        }
    }
    

    备注:两种方法
    1.用集合,建立一个空的集合,遍历nums,放进去的之后就不能放了,就是重复的
    2.原地置换,如上图所示

    相关文章

      网友评论

          本文标题:剑指offer03

          本文链接:https://www.haomeiwen.com/subject/brayfktx.html