leetcode 刷题周总结
-
#55 跳跃游戏 中判断当前数组元素能够到达的最大位置:
i + nums[i]
-
#118 杨辉三角 List(这是一个接口)集合中有一个取元素的方法经常用到:
E get(int index)---返回此list中指定位置的元素
Object[] toArray()---将一个list集合转换为一个数组
-
#191 位1的个数
n = n & (n - 1);
这个式子可以依次从后往前将整数 n 的二进制表示形式中 1 置换为 01111 & 1110 = 1110 A = 0011 1100 B = 0000 1101
- 位运算:& 、| 、^ 、~(非) 、<< 、>> 、>>>
- &:两个整数二进制形式对应位都为 1,则结果为 1,其他情况为 0
A & B 得到12,即0000 1100
- |:两个整数二进制形式对应位只要有一个为 1,则结果为 1,都为 0,则结果为 0
A | B 得到61,即 0011 1101
- ^:两个整数二进制形式对应位相异(一个为 0,一个为 1)的情况,则结果为 1,其他情况为 0(两个都为 1或者两个都为 0的情况)
A ^ B 得到49,即 0011 0001
- ~:单目运算符,对一个整数的二进制位的每一位取反,该位为 0 ,则变为 1,该位为 1,则变为 0
〜A 得到-61,即1100 0011
- <<:按位左移运算符。左操作数按位左移右操作数指定的位数
A << 2得到240,即 1111 0000
>>
: 按位右移运算符。左操作数按位右移右操作数指定的位数A >> 2得到15即 1111
>>>
: 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充A>>>2得到15即0000 1111
- &:两个整数二进制形式对应位都为 1,则结果为 1,其他情况为 0
- 位运算:& 、| 、^ 、~(非) 、<< 、>> 、>>>
-
#55 合并区间 中给区间排序,使用Lambda表达式的方式简化程序 :
Arrays.sort(intervals, new Comparator<int[]>() { public int compare(int[] interval1, int[] interval2) { return interval1[0] - interval2[0]; } }); //Lambda表达式版本 // 先按照区间起始位置排序 Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
-
#341 扁平化嵌套列表迭代器] 中利用到了Stack,总结一下栈的常用方法:
boolean empty(); //判断栈是否为空,空则返回true E peek(); //获取栈顶元素,但不将其删除 E pop(); //获取栈顶元素,并将其从栈顶部移除 E push(E item); //将一个元素加入到栈中 int search(Object o); //返回一个对象元素在栈中的位置,最上面的元素距离为1,依次往下类推
此外,Stack是Vector的直接子类,还从Vector中继承了很多方法也可以使用,单数要注意一些细节:eg:Vector中有的
boolean add(E e)
方法和Stack中的E push(E item)
方法作用一样,返回值不一样,具体是用时得看看java的帮助文档