[英]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.