java常用算法,给个int数组,数字不连续,找出最小空缺数

首先,我们定义一个主方法,该方法接收一个整数数组作为输入,并调用辅助方法来找到最小的空缺数字。主方法中的代码如下:java public static void main(String[] args) { int[] array = new int[] {1,2,3,6,7,8,9,10,11,12, 13, 14, 15, 16, 17, 18, 19, 20};//将数组拆分 int...
java常用算法,给个int数组,数字不连续,找出最小空缺数
在处理一个整数数组时,如果数组中的数字不连续,找出最小的空缺数字是一个常见的需求。例如,给定数组为 {1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20},我们需要找到数组中最小的缺失整数。这个问题可以通过递归的方法来解决。

首先,我们定义一个主方法,该方法接收一个整数数组作为输入,并调用辅助方法来找到最小的空缺数字。主方法中的代码如下:

java

public static void main(String[] args) {

int[] array = new int[] {1,2,3,6,7,8,9,10,11,12, 13, 14, 15, 16, 17, 18, 19, 20};

//将数组拆分

int minque = 1;

if (1 == array[0]){

minque = zhaoque(array);

}

System.out.println(minque);

}

辅助方法 `zhaoque` 用于递归地查找最小的空缺数字。以下是该方法的实现:

java

public static int zhaoque(int[] array){

int minque = 1;

//array 不为空

if (null != array && array.length>0){

if (array.length == 1){

minque = array[0]+1;

}

else if(array.length == 2){

if (1 == (array[1] - array[0])){

minque = array[1]+1;

} else {

minque = array[0]+1;

}

}

else {

int headlength = (array.length+1)/2;

int[] headArray = new int[headlength];

System.arraycopy(array,0,headArray,0,headlength);

//检查前半部分是否密集

int headmin = headArray[0];

int headmax = headArray[headlength-1];

if (headlength > (headmax - headmin)){

//前部分密集分布

int footlength = array.length - headlength;

int[] footArray = new int[footlength];

System.arraycopy(array,headlength,footArray,0,footlength);

int footmin = footArray[0];

int footmax = footArray[footlength-1];

// 检查后部分是否与前部分衔接

if (1 == (footmin - headmax)){

//检查后部分是否密集

if (footlength > (footmax - footmin)){

//后半部分密集分布

minque = footmax +1;

} else {

minque = zhaoque(footArray);

}

} else {

minque = headmax +1;

}

} else {

minque = zhaoque(headArray);

}

}

}

return minque;

}

通过这种方法,我们可以有效地找出给定数组中最小的空缺数字。2024-12-16
mengvlog 阅读 57 次 更新于 2025-10-30 12:58:06 我来答关注问题0
  • int[] headArray = new int[headlength];System.arraycopy(array,0,headArray,0,headlength);//检查前半部分是否密集 int headmin = headArray[0];int headmax = headArray[headlength-1];if (headlength > (headmax - headmin)){ //前部分密集分布 int footlength = array.length - head...

  •  z499470647 求程序员面试题

    10. 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。 public class BigInt() { int[] ArrOne = new ArrOne[1000]; String intString=""; public int[] Arr(String s) { intString = s; for(int i=0;i { 11. 如果要...

  •  愚二亮 java:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。

    辗除法——辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。代码:public class Test {public static final void main(String[] args) {System.out.println("请输入两个正整数");System.out.print("第一个正整数:");Scanner scanner = new Scanner(System...

  •  佴怜双006 利用堆栈,设计算法将一个十进制正整数转换为十六进制数输出。(先设计存储结构,在设计算法,算法要加

    存储结构就是int 数组 Stack,算法就是每次输入一个数字x,进行下面的循环:1、x 不为零继续,为零则跳出。2、每次将x 余16 的结果入栈(实际上是将x 的16 进制的第i 位入栈,i 表示循环次数)。函数式程序设计语言中,不同子函数的参数的种类和个数是不相同的,编译器也是使用堆栈来存储子程...

  •  无名状a 设给定三个数a、b、c,试写出寻找其中某个数的算法,并分析在平均情况下与最坏情况下,你的算法分别要做多

    if (x > y) { if (x > z) { return x;} return z;} else { if (y > z) { return y;} return z;} } public static void main(String[] args) { Test xy = new Test();System.out.println("最大的数是: " + xy.max(10, 20,30));} } 下面在给你一个HTML用JAVA写...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部