在Java中查找嵌套for循环的数组中缺少的数字
我需要在O(n^2)时间内找到数组中缺少的数字。我可以重新排列数组,因此它是有序的,但是如果不运行另一个for循环,我很难找到丢失的数字,但是我不能这样做。 这是我的密码: 这里丢失的号码是3在Java中查找嵌套for循环的数组中缺少的数字,java,arrays,Java,Arrays,我需要在O(n^2)时间内找到数组中缺少的数字。我可以重新排列数组,因此它是有序的,但是如果不运行另一个for循环,我很难找到丢失的数字,但是我不能这样做。 这是我的密码: 这里丢失的号码是3 public static void main(String[] args){ int ar []={0,1,6,2,5,7,4}; int n = ar.length; int temp = 0; int m = 0; for(int i = 0; i<n;
public static void main(String[] args){
int ar []={0,1,6,2,5,7,4};
int n = ar.length;
int temp = 0;
int m = 0;
for(int i = 0; i<n;i++){
for(int j = 1; j<n;j++){
if(ar[j-1] > ar[j]){
temp = ar[j-1];
ar[j-1]=ar[j];
ar[j]=temp;
if(ar[j-1]!=j-1) m=j;
}
else ar[j]=ar[j];
if(ar[j-1]!=j-1) m=j;
}
}
System.out.println(m);
}
publicstaticvoidmain(字符串[]args){
int ar[]={0,1,6,2,5,7,4};
int n=ar长度;
内部温度=0;
int m=0;
对于(int i=0;i如果输入数组包含0到ar.length
之间的所有数字,除了一个缺失的数字(如{0,1,6,2,5,7,4}
示例),则可以在线性时间内找到缺失的数字
只需计算完整数组中所有数字的总和(包括缺失的数字)-该数组的ar.length+1
元素从0到ar.length
,因此其总和为(ar.length-0)*(ar.length+1)/2
,并从中减去实际总和(可以在简单的线性时间循环中计算).不同的是缺少的号码
如果有多个缺失的数字(或者可能有重复的数字),并且您需要找到第一个缺失的数字,则在O(n*log(n)
time中对数组进行排序,然后对排序后的数组进行单次(线性时间)传递仍然比O(n^2)要好
解决方案。如果您只能执行两个循环,并且必须为O(n^2)执行两个循环,那么我建议如下:
- 循环通过所有值(外循环)
- 对于每个值,循环遍历所有值(内循环),并找到高于当前值的最小值
- 如果未找到更高的值,则跳过(当前值为最高值)
- 如果找到的最小值不是当前值+1,则找到缺少的值
这个怎么样
int array[] = {0,1,6,2,5,7,4};
int arrayTemp[] = array;
ArrayList<Integer> missing = new ArrayList();
Arrays.sort(arrayTemp);
for (int i=1; i<arrayTemp.length; i++) {
for (int j=arrayTemp[i-1]+1; j<arrayTemp[i]; j++) {
missing.add(j);
}
}
for (int i=arrayTemp[arrayTemp.length-1]+1; i<=arrayTemp[arrayTemp.length-1]; i++) {
missing.add(i);
}
System.out.println(missing.toString());
定义“缺少的数字”。数组中缺少的数字是什么?好的,数组中缺少的数字是什么:[0,1,5]
?缺少的数字的一般定义是什么?谢谢你的评论,但这是一个赋值,他们希望我们使用O(n^2)解决方案
{0,1,6,2,5,7,4} -> [3]
{0,1,6,2,5,7,4,14} -> [3, 8, 9, 10, 11, 12, 13]