Java:如何找到部分初始化排序数组的最后一个元素的索引

Java:如何找到部分初始化排序数组的最后一个元素的索引,java,arrays,Java,Arrays,假设我创建一个大小为N的int数组,然后用排序后的数字填充数组,直到索引x,其中0假设你不知道x是什么,假设未初始化元素的唯一值是0,并且所有初始化元素都不能有值0(这在您的情况下是不正确的),那么您只需对其进行线性搜索- int i=0; while(arr[i]!=0) i++; return i 您可以使用以下选项: int index = Arrays.binarySearch(theArray, 0); 条件:必须对数组进行排序 编辑 使用整数: Integer[] theArra

假设我创建一个大小为N的
int
数组,然后用排序后的数字填充数组,直到索引
x
,其中
0假设你不知道
x
是什么,假设未初始化元素的唯一值是
0
,并且所有初始化元素都不能有值
0
(这在您的情况下是不正确的),那么您只需对其进行线性搜索-

int i=0;
while(arr[i]!=0) i++;
return i
您可以使用以下选项:

int index = Arrays.binarySearch(theArray, 0);
条件:必须对数组进行排序

编辑

使用整数:

Integer[] theArray =  {0, 0, 0, 1, 2, 4, 7, null, null, null};
 int index = Arrays.binarySearch(theArray, null);

创建for循环并将其置于检查下一个元素是否已排序的条件中

代码:

intx

对于(int i=0;i您说过数组已排序。因此,您可以搜索数组中最大的元素,然后使用Arrays.asList(arr).indexOf(biggestElement)

int-biggetsElement=arr[0];
对于(int i=1;ibiggest元素){
最大元素=arr[i];
}
}
int index=Arrays.asList(arr.indexOf(biggestElement);

我不确定它是否适用于int元素,如果不适用,您可以改用Integer元素。

您应该使用Integer类而不是int基元数据类型。请阅读有关可以使用int基元数据类型的更多信息

每个元素都初始化为null。现在可以向其中添加数字

public int indexOfArray(Integer [] arr) {
    int i=0;
    while(arr[i]!=null) {
        i++;
    }
    return i;
}

按规定不可能。如果“排序值”均为负值并以-1结尾,例如:

[-5,-4,-3,-2,-1,     0,0,0,0]
与“排序值”相比,它们都是非正数,但以0结尾(添加空格以强调初始排序数字的结尾)



之后无法判断哪个0是“第一个”未排序的一个。

它不会进入循环!@StackFlowed我知道,我在前言中提到过。它数组被初始化为0。如果数组也有一个元素0呢?@StackFlowed你读过我的前言了吗?
并且所有初始化的元素都不能有值0
这里
I
是索引,或者你可以使用
计数器
我读过,我甚至对这个问题投了更高的票。这就是为什么我说我特别谈论
Array
,而不是
ArrayList
。如果给出了部分初始化的数组,那么只需计算它的长度,之后的一个是第一个未排序的,对吗?
x
问题中的不是一个参数,而是搜索的索引。没有要查找的值。这主意不错,但我认为您只想返回数组中第一个null的索引。这是一个好主意。我想知道我是否仍然可以使用primitive
int
来执行此操作。P.S:我不需要查找值。因此,我只需要:
Integer arr[]=new Integer[10]
,假设一些元素随后按排序顺序初始化,我只需要
而(arr[I]!=null)I++;
然后,
System.out.println(“最后一个初始化的元素位于索引:“+I”)
@user949300修复了miss理解的错误!这假设至少有一个初始数字是正数。如果它们都是负数,循环将不会停止。另外,不清楚它们是否相差1,我认为它们只是排序。我只是为第一个数组提供了一个示例。循环在任何情况下都将停止,它只迭代arr.length次。-1Arrays.binarySearch不一定返回找到的第一个元素(本例中为null)。“如果数组包含多个具有指定值的元素,则无法保证将找到其中一个。”[-5,-4,-3,-2,-1,0,0,0]在这种情况下会发生什么?这是他要求的一种方式。他可以根据自己的需要调整代码。但我担心如果使用负数,他就不能做他想做的事情。就像@user949300所说的那样。
int biggetsElement = arr[0];
for(int i=1; i < arr.length; i++){
    if(arr[i] > biggestElement){
        biggestElement = arr[i];
    }
}

int index = Arrays.asList(arr).indexOf(biggestElement);
Integer arr[] = new Integer[10];
public int indexOfArray(Integer [] arr) {
    int i=0;
    while(arr[i]!=null) {
        i++;
    }
    return i;
}
[-5,-4,-3,-2,-1,     0,0,0,0]
[-5,-4,-3,-2,-1,0,    0,0,0]