2017-06-04 71 views
0

我有一个包含数字的数组。查找数组中两个最小值的索引

我得到的两个最小的值(可以是相同的数目)在该数组中的O(N),但的我不能找出如何得到这个两个值的索引。

例如:在{1,2,3,1,5}的答案将是索引0和索引3。这是我正在使用的代码:

public static void minMin(int arr[]){ 
    int min1 = weights[0], min2 = weights[1]; 
     if(min1 > min2){ 
     int temp = min1; 
     min1 = min2; 
     min2 = temp; 
     } 
     for (int i = 2; i < weights.length; i++) { 
     if(weights[i] < min1){ 
     int temp = min1; 
     min1 = weights[i]; 
     min2 = temp; 
     }else if(weights[i] < min2){ 
     min2 = weights[i]; 
     } 
     } 
} 
+0

请参阅[此问题](https://stackoverflow.com/questions/6171663/how-to-find-index-of-int-array-in-java-from-a-given-value)。 –

+0

备案:我更新了我的答案,事情更简单。但是,再次,我没有放弃代码,因为我不是在这里做你的功课。我只是试着帮你自己做。 – GhostCat

回答

1

Ghostcat已经给出了答案,你只是不明白:

我只有一个指标,因为它的一个for循环,我需要两个元素的索引的..

刚刚创造更多变量:

public static void main(String[] args) { 

    minMin(new int[] { 1, 2, 3, 1, 5 }); 
} 

// Careful: this code only works for arr.lengh > 1 
public static void minMin(int arr[]) { 

    int min1 = arr[0]; 
    int min2 = arr[1]; 

    int index1 = 0; 
    int index2 = 1; 

    if (min1 > min2) { 
     int temp = min1; 
     min1 = min2; 
     min2 = temp; 

     index1 = 1; 
     index2 = 0; 
    } 

    for (int i = 2; i < arr.length; i++) { 
     if (arr[i] < min1) { 
      int temp = min1; 
      min1 = arr[i]; 
      min2 = temp; 
      index2 = index1; 
      index1 = i; 
     } else if (arr[i] < min2) { 
      min2 = arr[i]; 
      index2 = i; 
     } 
    } 

    System.out.println("Smallest: " + min1 + ", index " + index1); 
    System.out.println("2nd smallest: " + min2 + ", index " + index2); 
} 

输出:

Smallest: 1, index 0 
2nd smallest: 1, index 3 
+0

我个人会创建一个类来保存值并存储值,以保持算法的逻辑与存储的逻辑清楚。这也有助于将任务分成两个更小,更容易的任务。但那只是我的个人意见。 – Dennux

+0

非常感谢你! – Nauruto

+1

备案:我不介意你接受了这个接受,但是:做作业问题的所有部分是不鼓励的。我试图给出一些提示,让他自己解决它。你方便地为他解决了它。所以你实际上抢夺了重要的学习步骤:-) – GhostCat

5

除了本地保持最小的变量也需要索引的变量。

您可以用0/1对它们进行初始化,并在更改其他变量时更新它们。

进一步思考:另一个选项没有更多的变量。存储值+索引很方便(但注释是正确的,你可能会使用不同的类来做到这一点),但不是强制性的。因为当您有索引时,您总是可以获取

从这个意义上说:你可以改变你的代码来记住indixes。

+0

我只有一个索引,因为它的一个for循环,我需要索引的两个元素.. – Nauruto

+0

不,ghostcat是正确的。你只需要将值存储在变量 – Dennux

+0

简单而高效,就像平常一样:) – davidxxx

相关问题