《剑指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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异