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]