它所在的java排序数组';政府的立场很重要
假设我有这个数组它所在的java排序数组';政府的立场很重要,java,sorting,Java,Sorting,假设我有这个数组 int [] array= new int[26]; 它有26个位置,因为位置0是“a”,位置1是“b”。。。位置25为“z” 在每个位置我都有一个整数 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
int [] array= new int[26];
它有26个位置,因为位置0是“a”,位置1是“b”。。。位置25为“z”
在每个位置我都有一个整数
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
我想要的是在每个循环中找到两个最小的频率和两个最小频率的字母
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];
}
for(int i=0;i首先对数组排序…现在应用搜索算法…现在开始
一旦你找到了最小的元素,你就可以得到第二个最小的元素,因为数组已经被排序了…我想这样做不会有什么困难…对于排序,你可以使用复杂快速排序(nlogn)…希望它能帮助你Java是面向对象的,所以
让我们来上一节课,名字是LetterFrequency
LetterFrequency有两个属性:
1) 字符
2) 整数出现次数
您需要按“出现次数”属性对LetterFrequency对象进行排序。为此,请使LetterFrequency实现Comparable并相应地定义compareTo()方法
然后将所有LetterFrequency对象放入列表中并使用该方法
Lists.sort(yourList)
如果只想查找数组中的最小元素,可以使用以下代码:
List<int> list = Arrays.asList(ArrayUtils.toObject(array));
// Print the smallest element of your array
System.out.println(Collections.min(list));
List List=Arrays.asList(ArrayUtils.toObject(array));
//打印数组中的最小元素
System.out.println(Collections.min(list));
我将创建一个表示每个频率计数的类。然后我将创建一个按频率排序记录的列表。然后我将使用或来使用比较器对集合进行排序
或者,如果您只是想在数组中查找条目,但无法更改数据类型,则需要定义搜索(而不是排序)数组的算法。为了做到这一点,并且一次性做到这一点,我将为两个最不频繁出现的位置和相应频率定义局部变量。将最小值初始化为数组中的第一项,然后通过比较当前值继续,如果最小值小于当前值,则旋转保持跟踪的变量值。最后,您将得到两个最不频繁的数组声明。首先,此数组声明永远不会起作用:
int [] array= new array[26];
你需要:
int [] array= new int[26];
排序可以工作,但它不是最好的执行方法
一个O(n)的单回路怎么样
int min1=Integer.MAX\u int;
int idx1=-1;
int min2=Integer.MAX\u int;
int idx2=-1;
对于(int i=0;i你自己到目前为止尝试过什么?是家庭作业吗?条件是什么?我试图找到最小的字母,但我找不到第二个最小的字母,特别是如果频率每次都增加,这是我整个程序的一小部分,因为这是家庭作业,我将只列出一个解决方案。循环数组。如果元素小于您找到的最小值,请清除列表并在列表中添加位置。如果元素与您找到的最小值相同,请在列表中添加位置。循环完成后,您将有一个最小值的列表。取前两个。
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;
}
}