如果输入为91912323,则输出为33221199 for Java8,而在Java7中输出为11223399。
问题陈述也提供给您参考。
任何帮助都将不胜感激。
由1-9位数字组成的字符串将作为输入传递.程序必须打印根据发生次数排序的数字。如果一个或多个数字出现相同的次数,则必须首先打印最小的数字。 输入格式:第一行将包含1-9的N个数字。 边界条件:3 <= N <= 30 输出格式:根据发生次数排序的数字。 示例输入/输出1: 输入: 4443338993 产出: 3333444998 说明:3次发生次数最多(4次)。因此,它是首先印刷。4发生三次,因此在3s之后印刷。9发生两次,因此在4s之后打印。8只发生一次,因此在9之后打印。 示例输入/输出2: 输入: 95559998228 产出: 99995552288 说明:在这里,2和8发生两次。因此,2是较小的数字被打印在8之前。
package E001;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
*
* @author Anagh
*/
public class CharOccurrences {
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
char[] arr = input.toCharArray();
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i < arr.length; i++)
{
if(!map.containsKey(String.valueOf(arr[i])))
{
map.put(String.valueOf(arr[i]), 1);
}
else
{
map.put(String.valueOf(arr[i]), map.get(String.valueOf(arr[i]))+1);
}
}
TreeMap<String, Integer> output = sortByValue(map);
printMap(output);
}
public static TreeMap<String, Integer> sortByValue (HashMap<String, Integer> map)
{
ValueComparator vc = new ValueComparator(map);
TreeMap<String,Integer> sortedMap = new TreeMap<>(vc);
sortedMap.putAll(map);
return sortedMap;
}
private static void printMap(TreeMap<String, Integer> map) {
String key;
int value;
for (Map.Entry<String, Integer> entry : map.entrySet())
{
key = entry.getKey();
value = entry.getValue();
for(int j = 0; j < value; j++)
{
System.out.print(key);
}
}
}
}
class ValueComparator implements Comparator<String> {
Map<String, Integer> map;
public ValueComparator(Map<String, Integer> base) {
this.map = base;
}
@Override
public int compare(String a, String b) {
if (map.get(a) > map.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}
}发布于 2015-05-27 10:13:21
产出: 99995552288 说明:在这里,2和8发生两次。因此,2是较小的数字,在8之前打印。
您的比较器没有实现这个逻辑。为了实现这一逻辑,应:
public int compare(String a, String b) {
if (map.get(a) > map.get(b)) {
return -1;
} else if (map.get(a) < map.get(b)) {
return 1;
} else {
return a.compareTo(b);
}
}发布于 2015-05-27 10:11:32
您的比较器正在破坏它的合同,您应该添加一个案例,当有确切的发生次数时,应该如何排序,例如,首先是较小的数目。
https://stackoverflow.com/questions/30479349
复制相似问题