算法基础之ACM常用技能

一、数组初始化默认值
布尔数组默认值是false,int 默认值是0,我们可以自己调用API规定
int[] result = new int[5];
Arrays.fill(result, -1);//默认全部初始化为-1

二、3/2 在int 里是1,但是如果我们的题目条件如 不低于某a值的一半我们就得需要向上取整(int) Math.ceil(a/2.0)
参数必须是double类型,返回值也是double,你也可以转型为int

三、map的默认值骚操作
比如统计字符出现数量,累加的操作
可以这样写,节约代码量

不然得先判断键是否存在,不存在赋值0,存在就取值,取值了再加值,再放新值。



四、TreeMap排序 根据value排序 二维数组骚操作排序
TreeMap是根据自定义比较器进行排序,基本类型如int根据大小排,String类型根据字典顺序排序。

 

 

TreeMap的键就是一个TreeSet,键可以直接实现排序,并且带有去重的操作。

如果我们想根据哈希表的value进行排序呢?

Set<Map.Entry<Integer, Integer>> set = map.entrySet();
ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<>(set);
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
    @Override
    public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
        return o2.getValue() - o1.getValue();
    }
});

我们把entry节点化作一个set给提取出来,放入一个ArrayList里,在利用比较器根据value就可以实现排序。

TreeSet,Treemap的键在排序时都可以去重,按照树的结构进行排序和去重检测。

链表和数组排序不会去重

如果我们需要去做不去重的排序,并且要也要存储键和值怎么做呢?

如按照磁盘大小进行排序这题

M G T输入不一样,

我们需要一个键存换算后的单位值如1024MB,又需要一个value去存当前的容量字符串 2T 1G等

使用map会导致去重

我们可以使用二维数组,arr[][] 每行就是一个磁盘容量,0索引存当前统一换算单位的,1索引存原本的字符串。

按照0排序,1读取原字符串。

同时也不会改变输入顺序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值