请教大家,一道面试题,自己写了份答案,但觉得不得很紧凑,大家有什么更好的实现办法吗?

qq_29448025 2017-05-04 01:00:33
...全文
787 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ckuangf 2017-05-08
  • 打赏
  • 举报
回复
引用 6 楼 yjk1992 的回复:
"[\\[\\]]"替换中括号的正则表达式 ,可具体看不明白啊,谁帮解释下~~
[ab]表示匹配a和b[\\[\\]]就是匹配map输出格式里面【c=d】的两个括号呀
解开者 2017-05-08
  • 打赏
  • 举报
回复
引用 8 楼 HinanaiTenshi 的回复:
如果是算法相关工作,最后全用数组来解决,而不要过于依赖api。 如果没有上面的限制,那依赖api去完成比较简单,guava组件的Multiset集合自带计数功能,如果只使用原生的组件,那就用SortedMap,专为排序设计。
顶,说的客观公正。 作为应用代码,我会这么写。
    public static void main(String[] args) {
        System.out.println(Stream.of(1, 3, 2, 5, 9, 0, 7, 2, 2, 4, 6, 5, 1, 6)
                .collect(Collectors.groupingBy(i -> i, Collectors.counting()))
                .entrySet()
                .stream()
                .sorted(Map.Entry.<Integer, Long>comparingByValue().thenComparing(Map.Entry.comparingByKey()).reversed())
                .collect(Collectors.toList()));
    }
qq_29448025 2017-05-06
  • 打赏
  • 举报
回复
引用 3 楼 LinBilin_ 的回复:

public static String sortByTimes(int[] arr){
		Map<Integer,Integer> result=new HashMap<Integer,Integer>();
		for(int ele:arr){
			result.put(ele, result.get(ele)!=null?(result.get(ele)+1):1);
		}
		 List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry<Integer, Integer>>( result.entrySet() ); 
		 Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
			    public int compare(Map.Entry<Integer, Integer> o1,
			            Map.Entry<Integer, Integer> o2) {
			        return (o2.getValue() - o1.getValue());
			    }
			});
		return  list.toString().replaceAll("=",":").replaceAll("[\\[\\]]", " ").replaceAll(",","\n");
	}
qq_29448025 2017-05-06
  • 打赏
  • 举报
回复
引用 8 楼 HinanaiTenshi 的回复:
如果是算法相关工作,最后全用数组来解决,而不要过于依赖api。 如果没有上面的限制,那依赖api去完成比较简单,guava组件的Multiset集合自带计数功能,如果只使用原生的组件,那就用SortedMap,专为排序设计。
我一位同学,他说用C语言写的话,要复杂得多,他说的对吗?
yjk1992 2017-05-05
  • 打赏
  • 举报
回复
"[\\[\\]]"替换中括号的正则表达式 ,可具体看不明白啊,谁帮解释下~~
某某某个人啊 2017-05-05
  • 打赏
  • 举报
回复
HinanaiTenshi 2017-05-05
  • 打赏
  • 举报
回复
如果是算法相关工作,最后全用数组来解决,而不要过于依赖api。 如果没有上面的限制,那依赖api去完成比较简单,guava组件的Multiset集合自带计数功能,如果只使用原生的组件,那就用SortedMap,专为排序设计。
zhujinqiang 2017-05-05
  • 打赏
  • 举报
回复
围观3楼大神
  • 打赏
  • 举报
回复

public static String sortByTimes(int[] arr){
		Map<Integer,Integer> result=new HashMap<Integer,Integer>();
		for(int ele:arr){
			result.put(ele, result.get(ele)!=null?(result.get(ele)+1):1);
		}
		 List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry<Integer, Integer>>( result.entrySet() ); 
		 Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
			    public int compare(Map.Entry<Integer, Integer> o1,
			            Map.Entry<Integer, Integer> o2) {
			        return (o2.getValue() - o1.getValue());
			    }
			});
		return  list.toString().replaceAll("=",":").replaceAll("[\\[\\]]", " ").replaceAll(",","\n");
	}
向码农看齐 2017-05-04
  • 打赏
  • 举报
回复
3楼大神。。。
zy_arhahaha 2017-05-04
  • 打赏
  • 举报
回复
楼上好强啊,,
李德胜1995 2017-05-04
  • 打赏
  • 举报
回复
用Map,key储存数字,value存次数就可以了
qq_29448025 2017-05-04
  • 打赏
  • 举报
回复
自己写的答案如下:
package testpackage;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class Test02 {

	public static void main(String[] args) {
		int[] arr = {1,3,2,5,9,0,7,2,2,4,6,5,1,6};
		Map<Integer,Integer> m = new HashMap<Integer,Integer>();
		for(int i=0;i<arr.length;i++){
			if(m.containsKey(arr[i])){
				m.put(arr[i],m.get(arr[i])+1);
			}else{
				m.put(arr[i], 1);
			}
		}
		Comparator<Number> com = new Comparator<Number>(){
			@Override
			public int compare(Number o1, Number o2) {
				return o1.value-o2.value!=0?o2.value-o1.value:o1.key-o2.key;
			}
		};
		List<Number> l = new ArrayList<>();
		for(Entry<Integer,Integer> e:m.entrySet()){
			Number num =new Number(e.getKey(),e.getValue());
			l.add(num);
		}
		Collections.sort(l, com);
		for(Number n : l){
			System.out.println(n);
		}
	}
}

class Number {
	int key;
	int value;
	public Number(int key, int value) {
		super();
		this.key = key;
		this.value = value;
	}
	@Override
	public String toString() {
		return + key + ":" + value ;
	}
	
}

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧