一个小时!!!!
我已经通过这道算法题!一组无序的自然数集合,由0,1,2... ...,n的数字和一个的数字X(X>=0 && X<=n)组成,请从集合中找出这个重复数字X。
https://gw-c.nowcoder.com/api/sparta/jump/link?link=https%3A%2F%2Fwww.nowcoder.com%2FquestionTerminal%2F1664fe871878496aa600b6e09557982b
全部评论
附上源码
import java.util.Scanner;
public class Test{
static int[] array = new int[2000];
static int max = 0;
public static void test(){
for(int i=0;i<array.length;i++){
array[i]=-1;
}
//找小A GetAns()来给我答案
int ans = GetAns();
System.out.println(ans);
}
//小A
/**
* 小A要接受输入端的数据,把输入的数据value送入数组中
* 第一步 如果value的值数组里已经有了,则证明value为重复数字,用ans存起来,反之就继续送入数组
* 第二步 判断value是否大于max,是就更新max的值
* 第三步 找小B,看看现在数组里面0-max的值有几个还没有填值
* 当程序满足ans不为初值-1并且收到了一个回车并且小B的结果数组已经存满,就退出死循环
*/
private static int GetAns(){
Scanner input = new Scanner(System.in);
int ans = -1;
while(true){
int value = input.nextInt();
if (value > max ){//更新max的值
max = value;
}
if(value == array[value]){//把接受的数据送入数组
ans = value;
System.out.println("ans="+ans);
}else{
array[value] = value;
}
//print();
if(Check() == 0 && ans!=-1 && input.hasNextLine() ){//判断退出条件
break;
}
}
return ans;
}
//小B 检查数组里面的值还剩下几个没有填满
private static int Check(){
int time = 0;
for (int i=0;i<=max;i++){
if(array[i]==-1){
time++;
}
}
return time;
}
private static void print(){
for (int i=0;i<=max;i++){
System.out.print(array[i]+" ");
}
}
public static void main(String[] args) {
Test.test();
}
}
相关推荐
点赞 评论 收藏
分享
02-26 17:55
成都信息工程大学 Java 点赞 评论 收藏
分享
01-14 14:32
北京理工大学 运营 点赞 评论 收藏
分享


OPPO
| 实习
| 超多精选岗位
点赞 评论 收藏
分享