《剑指offer》面试题的Java实现-数组中重复的数字

题目描述:在⼀个⻓度为 n 的数组⾥的所有数字都在 0 到 n-1 的范围内。 数组中某些数字是重复的,但不 知道有⼏个数字是重复的。也不知道每个数字重复⼏次。请找出数组中第⼀个重复的数字。 例如,如果 输⼊⻓度为 7 的数组 [2,3,1,0,2,5,3],那么对应的输出是第⼀个重复的数字 2。没有重复的数 字返回 -1。

 

//解法一:借助Set集合,如果元素不存在Set集合中,则添加进Set中,如果Set包含该元素,就返回该元素
public static int solution1_1(int []arr){
//解法一:借助Set集合,如果元素不存在Set集合中,则添加进Set中,如果Set包含该元素,就返回该元素
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < arr.length; i++) {
if(set.contains(arr[i])){
return arr[i];
}
else{
set.add(arr[i]);
}
}
return -1;
}
public static int solution1_2(int []arr){
//解法二:下标法: 通过不停交换元素,使得元素和它所对应的下标相等。
if(arr!=null){
for (int i = 0; i < arr.length; i++) {
while(i!=arr[i]){
if(arr[i] == arr[arr[i]]){
return arr[i];
}
int k = arr[arr[i]];
arr[arr[i]] = arr[i];
arr[i] = k;
}
}
}
return -1;
}


posted @   深海、  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示