2014-09-19 78 views
1

所以這是一個獨特的問題,我將不勝感激任何幫助。數組中兩點之間的Java距離?

該目標: 計算並返回從最小值到最大值的「距離」整數。 該列表不排序,不應該排序。 最小值可能在max或vise-verse之前。 在{2,-5,-7,8,22,-10} answer = 1(從-10到22的距離)的列表中 在{2,-5,-7,8,22 ,-6} answer = 2(從-7到22的距離)

謝謝你的幫助。

+0

沒有理由對不起,你可以,如果添加另一個,如果你喜歡。 – user3776356 2014-09-19 16:06:04

+1

在我看來,你需要確定MIN和MAX值在哪裏的索引。然後簡單地從另一箇中減去一個。在這種情況下,你將有一個索引2和索引4,對於2 – durbnpoisn 2014-09-19 16:06:14

+0

@durbnpoisn的差價,我們還沒有覆蓋索引的要麼....它在java中的工作原理與python中的一樣嗎? – user3776356 2014-09-19 16:08:02

回答

6

只是跟蹤相應指數:

double min = list[0]; 
int minIndex = 0; 
double max = list[0]; 
int maxIndex = 0; 
for (int i =1 ; i < list.length ; i++) { 
    if(min > list[i]){ 
     min = list[i]; 
     minIndex = i; 
    } 
    if(max < list[i]){ 
     max = list[i]; 
     maxIndex = i; 
    } 
} 
int res = Math.abs(minIndex - maxIndex); 
+0

謝謝。非常有意義 – user3776356 2014-09-19 16:15:30

+0

僅供參考 - 這假定列表中的項目是唯一的(OP沒有說明方式或其他方式)。例如,使用OP的「{2,-5,-7,8,22,-6}」樣本正確地得出2.但是,在列表的開始處添加另一個-7元素會更改輸出,可能不被期望(再次,未指定)。 – splungebob 2014-09-19 16:45:58

+0

謝謝你指出......你的假設是正確的。數組中沒有重複項。 – user3776356 2014-09-19 17:55:34

2

保持指數之同時找到maxmin

int indMin = 0; 
int indMax = 0; 
double min = list[0]; 
double max = list[0]; 
for (int i =0; i<list.length;i++){ 
    if(min>list[i]){ 
     min=list[i]; 
     indMin = i; 
    } 
    if(max<list[i]){ 
     max = list[i]; 
     indMax = i; 
    } 
} 

int distance = Math.abs(indMax - indMin); 
+1

你不需要循環兩次...請將循環合併成一個... – StackFlowed 2014-09-19 16:11:21

+1

這是錯誤的。如果數組是「{1,2}」,那麼它將返回「abs(1 - (-1))= 2」 – 2014-09-19 16:15:47

+0

@Jean Logeart事實上,編輯 – deKajoo 2014-09-19 16:19:33