【发布时间】:2019-05-18 07:33:29
【问题描述】:
我有一个带有一些整数的数组。说,numbers={3,0,1} 或说,numbers={9,6,4,2,3,5,7,0,1}。现在我必须从数组中找出缺失的数字。根据此示例,每组中只有一个缺失的数字。第一个错过2,第二个错过8。
我已经编码了。我的代码不仅可以从指定集合中找出一个缺失的数字,它还可以从给定集合中找出多个缺失的数字。
但如果同一组中缺少两个连续的数字,则无法找出。
My code
import java.util.Arrays;
public class Missing_number
{
public static void main( String args[] )
{
int numbers[]={9,6,4,5,7,0,1};
Arrays.sort(numbers);
int i=1;
while ( i < numbers.length )
{
if ( numbers[i] - numbers[i-1] == 1 )
{
}
else
{
System.out.println( "Missing number is " + ( numbers[i-1] + 1 ) );
}
i++;
}
}
}
我在想,如果我能够在数组中附加第一个缺失的数字然后开始搜索,那么代码是什么样的? numbers={9,6,4,5,7,0,1} 现在,这个集合中已经缺少 8 个了。现在我已经从列表中终止了另外两个元素 (2,3)。 输出:根据我的代码:2,8 但也缺少 3 但未显示。
我在想,如果我能够在数字数组中附加 2,那么它可能会更容易一些。但是我们都知道Java数组是不可变的,所以我们不能增加它的长度。
所以,也许我会使用 List。但是在列表中这种类型的索引number[0]=something不支持。那我怎么能继续。我是在使用列表还是仍然卡在数组中?
所以我尝试用一个数组列表来创建它。
Mycode(modified version from array)
public class T1 {
public static void main(String args[]){
List<Integer> numbers=new ArrayList<>();
numbers.add(9);
numbers.add(6);
numbers.add(4);
numbers.add(5);
numbers.add(7);
numbers.add(0);
numbers.add(1);
Collections.sort(numbers);
int i=1;
while(i< numbers.size()) {
if (numbers.get(i) - numbers.get(i-1) == 1) {
} else {
System.out.println("Missing number is " + (numbers.get(i-1) + 1));
numbers.add((numbers.get(i-1)+1));
Collections.sort(numbers);
}
i++;
}
}
}
Arraylist 可以解决我的问题。但是有没有可能一个简单的数组就可以解决这个问题呢?
【问题讨论】:
-
但是
ArrayList支持索引,对吧? -
使用列表,而不是下标,使用
get(int)方法,将索引作为方法参数。 -
“但众所周知,Java 数组是不可变的”——不,Java 数组是可变的。它们不可调整大小,但它们是可变的。
标签: java arrays algorithm arraylist