剑指 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);
}
}
}