2013-03-19 23 views
0

可以說我有這個數組java的排序數組,其中很重要的位置

int [] array= new int[26]; 

它有26個地方,因爲位置0是「A」,位置1'B」 ...... 25位是‘Z’ 所以在每個位置我有一個int號碼,以便

if in position array[0]=5 it means i have 5 'a' 
if in position array[1]=6 it means i have 6'b' 
if in position array[0]=0 it means that i do not have the 'a' letter 

我想是在每個循環找到2個最小頻率和兩個最小頻率的信

for(int i=0;i<array.length;i++) 
     if(array[i]==0) 
     continue;  
     else{ 
      cmin1=(char)('a'+i); 
      posi=i;     
      min1=array[posi] ; 
      break; 
     } 
      for(int j=posi+1;j<array.length;j++){ 
      if(array[j]==0) 
       continue; 
      else if(array[j]<=min1){ 
       posj=posi; 
       posi=j; 
       cmin2=cmin1; 
       cmin1=(char)(j+'a');  
       min2=min1; 
       min1=array[j]; 
      } 

我曾經嘗試這樣做是錯誤的

+14

和你有什麼嘗試到現在,你自己? – SudoRahul 2013-03-19 16:36:47

+0

它是功課嗎?有什麼條件? – 2013-03-19 16:39:07

+0

我試圖找到最小的字母,但我找不到第二小,特別是如果頻率每次增加 – user2180352 2013-03-19 16:39:13

回答

0

排序的工作,但它不是最好的執行方法。

單個循環將會是O(n)嗎?

int min1 = Integer.MAX_INT; 
int idx1 = -1; 
int min2 = Integer.MAX_INT; 
int idx2 = -1; 

for(int i=0;i<array.length;i++) { 
    // skip empty items 
    if(array[i]==0) 
     continue; 

    if (array[i] < min1) { 
     min2 = min1; 
     idx2 = idx1; 
     min1 = array[i]; 
     idx1 = i; 
    } 
    else if (array[i] < min2) { 
     min2 = array[i]; 
     idx2 = i; 
    } 
} 
0

排序排列第一......現在應用搜索算法......在這裏你去 一旦你發現你可以得到第二個最小最小的元素作爲數組已經排序......我想不會有什麼困難,這樣做......排序,你可以使用快速排序與複雜性(nlogn)...希望它可以幫助你

2

的Java是面向對象的等等......

讓我們來上一堂課,名字是LetterFrequency LetterFrequency有2個屬性: 1)Char c haracter 2)整數次發生

您需要按其「出現次數」atrribute對LetterFrequency對象進行排序。爲此,請使LetterFrequancy實現Comparable並相應地定義方法compareTo()。

然後把你的所有LetterFrequency對象的列表,並使用方法

Lists.sort(yourList) 
0

如果你只是想找個最小的數組中的元素,你可以使用下面的代碼:

List<int> list = Arrays.asList(ArrayUtils.toObject(array)); 

// Print the smallest element of your array 
System.out.println(Collections.min(list)); 
0

我會創建一個代表每個頻率計數的類。然後我會創建一個按照頻率排序記錄的Comparator。然後,我將使用Arrays.sort()Collections.sort()使用Comparator對收集進行分類。

或者,如果你只是想找到數組中的條目,但不能改變你的數據類型,那麼你需要定義一個算法搜索(不排序)的陣列。要做到這一點,並一次完成,我會爲最不頻繁發生的兩個位置和相應頻率定義局部變量。將至少初始化爲數組中的第一個項目,然後繼續比較當前項目,如果它少於,則旋轉正在跟蹤的變量的值。最後你會有兩個最不頻繁的。

0

首先,這個數組聲明絕不會工作:

int [] array= new array[26]; 

您需要:

int [] array= new int[26];