[英]Java Finding number of occurrences of a string in another string using nested loops
[英]Finding the missing number in an array with nested for loops in Java
我需要在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;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);
}
如果输入数组包含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)
时间对数组进行排序,然后在数组上进行单个(线性时间)传递排序数组仍将比O(n^2)
解决方案更好。
如果您只能执行2个循环,并且必须对O(n ^ 2)执行2个循环,那么我建议如下:
这个怎么样?
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,6,2,5,7,4} -> [3]
{0,1,6,2,5,7,4,14} -> [3, 8, 9, 10, 11, 12, 13]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.