剑指offer
1、找出数组中反复的数字。
题目形容:
找出数组中反复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范畴内。数组中某些数字是反复的,但不晓得有几个数字反复了,也不晓得每个数字反复了几次。请找出数组中任意一个反复的数字。
示例 :
输出:[2, 3, 1, 0, 2, 5, 3]输入:2 或 3
示例答案:
/**1、初始化汇合为空集合,反复的数字 repeat = -12、遍历数组中的每个元素: 将该元素退出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); } }}