[英]Finding index of kth smallest element in an array efficiently (iterative)?
[英]Finding the index of the smallest element in an array (Java)
我正在嘗試編寫一個將整數數組作為參數並返回數組中最小元素的索引的代碼塊。 此外,如果列表是空列表,該函數應返回 -1。
到目前為止,我有,
public static int indexOfSmallest(int[] array){
int index = 0;
int min = array[index];
for (int i = 1; i < array.length; i++){
if (array[i] <= min){
min = array[i];
index = i;
}
}
return index;
}
但是,我收到此錯誤並且不確定我需要修復什么。
任何幫助將非常感激。 謝謝你。
該錯誤是不言自明的。 您無法處理空輸入數組的情況。
public static int indexOfSmallest(int[] array){
// add this
if (array.length == 0)
return -1;
int index = 0;
int min = array[index];
for (int i = 1; i < array.length; i++){
if (array[i] <= min){
min = array[i];
index = i;
}
}
return index;
}
如果最小元素出現多次,並且您想返回其第一次出現的索引,請將您的條件更改為:
if (array[i] < min)
如果您的numbers
數組為空,並且index
聲明為 0,則min = array[index]
將導致錯誤,因為您試圖訪問空列表中不存在的第一個元素。
您應該插入一個if
(在for
循環之前)來檢查numbers
數組是否為空。
您收到 IndexOutOfBoundsException 是因為您試圖從行中的空數組中檢索值:
int min = array[index];
只需使用以下命令檢查此行之前的數組是否為空:
if(array.length < 1) return -1;
public static int indexOfSmallest(int[] arr) {
int imin = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[imin]) {
imin = i;
}
}
return imin;
}
或者
int min = Arrays.stream(arr).min().orElseThrow();
int imin = Arrays.stream(arr).boxed().collect(Collectors.toList()).indexOf(min);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.