最近刷Leetcode时遇到的坑

double 转 int

double a = Math.log(label)/Math.log(2);//换底公式,相当于log2()
int level = new Double(a).intValue();//这个方法需要创建Double对象,才能调用这个方法

public int intValue() {
    return (int)value;
}

类似的转byte的方法:byteValue()

转long:longValue()

转float:floatValue()

找二叉树的同一层的对称节点

该层的最大值+最小值 = A节点 + A节点的对称节点

=》 该层的最大值+最小值 - A节点 = A节点的对称节点

环形数组下标移动

计算下一个跳转点 next = cur + nums[cur] 时,对于越过数组的情况进行处理:

如果 next 为负数:在 next的基础上增加 n *⌈next/n⌉,将其映射回正值;

如果 next 为正数:将 next 模 数组长度 n,确保不会越界。

整理一下,我们可以统一写成 next = ((cur + nums[cur]) % n + n ) % n

Pair<K,V>键值对

Pair 类在 javafx.util 包中

Pair键值对只有get方法,没有set方法

子数组必须是连续的!!!

优先队列

PriorityQueue的peek和element操作是常数时间,add, offer, 无参数的remove以及poll方法的时间复杂度都是log(N)

实现从小到大排序:

import java.util.*;
public class PriorityQ {
    public static void main(String[] args) {
        PriorityQueue<int[]> q = new PriorityQueue<>(new Comparator<int[]>(){
            @Override
            public int compare(int[] a,int[] b){
                if (a[0] > b[0]){
                    return 1;
                }else if(a[0] < b[0]){
                    return -1;
                }else{
                    // compareTo方法比较不了int!!!
                    Integer temp = a[1];
                    return temp.compareTo(b[1]);
                }
            }
        });
        q.offer(new int[]{1,3});
        q.offer(new int[]{0,4});
        q.offer(new int[]{2,1});
        q.offer(new int[]{1,2});
        while (!q.isEmpty()){
            System.out.println(Arrays.toString(q.poll()));
        }
    }
}

//output
[0, 4]
[1, 2]
[1, 3]
[2, 1]

   转载规则


《最近刷Leetcode时遇到的坑》 锦泉 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录