关于java:剑指offer01找出数组中重复的数字

38次阅读

共计 1118 个字符,预计需要花费 3 分钟才能阅读完成。

剑指 offer

1、找出数组中反复的数字。

题目形容:

找出数组中反复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范畴内。数组中某些数字是反复的,但不晓得有几个数字反复了,也不晓得每个数字反复了几次。请找出数组中任意一个反复的数字。

示例:

 输出:[2, 3, 1, 0, 2, 5, 3]
输入:2 或 3 

示例答案:

/**
1、初始化汇合为空集合,反复的数字 repeat = -1
2、遍历数组中的每个元素:将该元素退出 HashSet 汇合中,判断是否增加胜利
 如果增加失败,阐明该元素曾经在汇合中,因而该元素是反复元素,将该元素的值赋给 repeat,并完结遍历
3、返回 repeat
*/
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;
    }
}

改良 IDEA 运行版本答案:

package com.java.offer_75;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Solution {public HashSet findRepeatNumber(int[] nums) {HashSet<Integer> set = new HashSet<Integer>();
        HashSet<Integer> set2 = new HashSet<Integer>();
        for (int num : nums) {if (!set.add(num)) {set2.add(num);
        }
    }
    return set2;
 }
 
    public static void main(String[] args) {int [] nums=new int[]{2,5,2,1,5,3,3};
        Solution solution=new Solution();
        HashSet repeatNumber = solution.findRepeatNumber(nums);
        System.out.println("剑指 offer 第一题:数组中反复的数字 n");
        System.out.println("反复的数字为:");
        Iterator iterator = repeatNumber.iterator();
        while (iterator.hasNext()){Object next = iterator.next();
            System.out.println(next);
        }
    }
}

正文完
 0