簡體   English   中英

java排序數組,它的位置很重要

[英]java sort array where it's position matters

讓我說我有這個陣列

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];
            }

我試過這個是錯的

Java是面向對象的,所以......

讓我們來一個類,其名稱將是LetterFrequency LetterFrequency有2個屬性:1)Char字符2)整數出現

您需要按照“出現次數”atrribute對LetterFrequency對象進行排序。 為此,使LetterFrequancy實現Comparable並相應地定義方法compareTo()。

然后將所有LetterFrequency對象放入List中並使用該方法

Lists.sort(yourList)

首先對數組進行排序...現在應用搜索算法......在這里你找到最小的元素,你可以得到第二個最小的元素,因為數組已經排序了...我想這樣做沒有任何困難。 ..對於排序你可以使用復雜的快速排序(nlogn)...希望它可以幫助你

如果您只想查找數組中的最小元素,可以使用以下代碼:

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

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

我會創建一個代表每個頻率計數的類。 然后我會創建一個Comparator ,按頻率命令記錄。 然后我會使用Arrays.sort()Collections.sort()來使用Comparator對集合進行排序。

或者,如果您只是想在數組中查找條目但無法更改數據類型,則需要定義用於搜索 (而不是排序 )數組的算法。 為了做到這一點,並且在一次通過中,我將為兩個最不常發生的位置和相應頻率定義局部變量。 將最小值初始化為數組中的第一個項目,然后通過比較當前項目繼續進行,如果它小於那么,則旋轉保持跟蹤的變量的值。 最后,你會有兩個最不頻繁的。

首先,這個數組聲明永遠不會起作用:

 int [] array= new array[26];

你需要:

 int [] array= new int[26];

排序可行,但它不是表現最佳的方法。

單個循環怎么樣是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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM