剑指 Offer 03. 数组中重复的数字
结果
执行结果:通过显示详情
执行用时:1 ms ,在所有Java提交中击败了79.80%的用户
内存消耗:48.9 MB ,在所有Java提交中击败了66.66%的用户
通j过测试用例:27/27
花费
10分钟左右,没有编码难度。
思路
最开始想的是存数字,每次读一个数字再和存的数字做匹配,很垃圾。
-
思路1
使用一个同样size的数组,按索引存储,存了表示1,没存表示0,输出第一个访问了存1的下标
-
思路2
使用set动态保存
思路一1效果更好
code1
public int findRepeatNumber(int[] nums) {
/**
* 思路1,使用一个同样size的数组,按索引存储,存了表示1,没存表示0,输出第一个访问了存1的下标
*/
int[] re = new int[nums.length];
// for (int i : re){
// System.out.print(i+"\t");
// }
for (int num : nums) {
if (re[num] == 1) {
return num;
} else {
re[num] = 1;
}
}
return -1;
}
code2
public int findRepeatNumber1(int[] nums) {
/**
* 思路2,使用set动态保存
*/
HashSet<Integer> hs = new HashSet<>();
for (int num : nums) {
boolean re = hs.add(num);
if (!re) {
return num;
}
}
return -1;
}