【问题标题】:How to check if elements in an array are sorted according to number of occurences?如何检查数组中的元素是否根据出现次数排序?
【发布时间】:2017-09-11 01:09:54
【问题描述】:

我想检查数组中的元素是否根据它们出现的次数进行排序。这是假设如果元素相同,它们已经被分组。 int [] y = {7, 7, 7, 8, 8, 5, 5, 5, 5} 应该返回 falseint [] y = {5, 5, 5, 5, 7, 7, 7, 8, 8} 应该返回 true。有四个5,三个7,两个8,应该这样排列。

这是我目前所拥有的:

import java.io.*;
import java.util.*;


public class testing2 {

  public static void main(String[] args){
    int [] y = {7, 7, 7, 8, 8, 5, 5, 5, 5};
    System.out.println(isSorted(y));  // should return false

  }

  public static boolean isSorted(int[] y){

    HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();

    for(int i=0; i<y.length; i++){
      if(hash.containsKey(y[i])){
        hash.put(y[i], hash.get(y[i]) + 1);
      } else {
        hash.put(y[i], 1);
      }
    }
    System.out.println(hash);
    return true;  // code is not complete yet
  }
}

它会打印:

{5=4, 7=3, 8=2}
true

所以现在我有了每个元素的出现次数。接下来我该怎么做?

【问题讨论】:

  • isSorted 将始终返回 true,您接下来要做什么?
  • 如何检查,所以基本上你想说“未订购”和“已订购”?如果是这样,您可以在计数时迭代每个项目,然后如果数字发生变化,请检查其数字是否大于(或小于)之前的数字集..
  • @LKTN.25 是的,return true 部分尚未完成。我有这些事件,现在我想看看我的数组 y[] = {7, 7, 7, 8, 8, 5, 5, 5, 5} 是否根据出现次数按降序排列。不是因为出现的次数是 3、2、4,而是应该是 4、3、2

标签: java arrays list sorting


【解决方案1】:

您可以在数组的单遍中解决这个问题;这里有一些提示:

在遍历数组时,请跟踪当前的 number(例如 5、7 或 8)和 quantity。完成下一组numbers 后,将其与上一组number/quantity 进行比较。然后,适当地返回 true 或 false。

【讨论】:

    【解决方案2】:

    如果您希望保持使用HashMap 的方向,有一种方法可以继续:

    • 请改用LinkedHashMap,因此当您遍历地图时,您将按照您在地图中放置的顺序进行迭代
    • 遍历地图,查看每个条目是否有计数&lt; prev 条目。伪代码:

      int prevCount = MAX_INT;
      for (entry : map) {
          currentCount = entry.getValue()
          if (currentCount > prevCount) {
              return false
          }
          prevCount = currentCount
      }
      return true;
      

    或者,您可以对数组进行一次遍历(伪代码):

     prevCount = MAX_INT
     currentCount = 0;
     for (i = 0...array.length) {
         increment currentCount 
    
         // if i points to last number in group
         if (i is the last element of array, OR
                 next element is not equals to current element) {
             if currentCount > prevCount {
                 return false;
             }
             prevCount = currentCount;
             currentCount = 0;
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2012-08-04
      • 1970-01-01
      相关资源
      最近更新 更多