0

假设我有这个数组

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

我试过这个是错误的

4

6 回答 6

2

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

让我们看一个类,它的名字是 LetterFrequency LetterFrequency 有 2 个属性:1) Char 字符 2) 整数出现

您需要按“出现”属性对 LetterFrequency 对象进行排序。为此,请让 LetterFrequancy 实现 Comparable 并相应地定义方法 compareTo()。

然后将所有 LetterFrequency 对象放入 List 并使用该方法

Lists.sort(yourList)
于 2013-03-19T16:44:10.813 回答
0

首先对数组进行排序......现在应用搜索算法......一旦找到最小的元素,你就可以得到第二小的元素,因为数组已经排序......我想这样做不会有任何困难。 ..对于排序,您可以使用复杂的快速排序(nlogn)...希望它可以帮助您

于 2013-03-19T16:43:29.287 回答
0

如果您只想找到数组中的最小元素,可以使用以下代码:

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

// Print the smallest element of your array
System.out.println(Collections.min(list)); 
于 2013-03-19T16:44:35.290 回答
0

我会创建一个代表每个频率计数的类。然后我会创建一个Comparator按频率对记录进行排序的方法。然后我会使用Arrays.sort()orCollections.sort()对集合进行排序Comparator

或者,如果您只是想在数组中查找条目但不能更改数据类型,那么您需要定义一种算法来搜索(而不是排序)数组。要做到这一点,并且一次性完成,我将为两个最不频繁出现的位置和相应频率定义局部变量。将最少初始化为数组中的第一项,然后通过比较当前项进行比较,如果小于则旋转保持跟踪的变量的值。最后,您将获得最不频繁的两个。

于 2013-03-19T16:47:09.120 回答
0

首先,这个数组声明永远不会起作用:

 int [] array= new array[26];

你需要:

 int [] array= new int[26];
于 2013-03-19T16:53:21.237 回答
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;
    }
}
于 2013-03-19T16:55:55.830 回答