数据结构
栈Stack
Stack实现类, All Implemented Interfaces:
Serializable , Cloneable , Iterable , Collection , List , RandomAccess ,Stack实现了如上接口,在实际解决简单问题时,可以用数组构建栈结构(设置栈顶指针-标识),减少内存消耗
example:leetcode-20. 有效的括号
PS:switch case消耗内存,尽量使用if-else-if代替
移位操作符
计算机支持两种移位运算,假设操作数为x,移动的位数为k,则向左移位是 x << k,向右移位是 x >> k。左移位会对输入的操作数舍弃最高的k位,并在右端补k个0。而右移位运算却分为两种情况,分别是逻辑右移和算术右移(也叫无符号右移和符号右移),在逻辑右移中,会对操作数舍弃最低的k位,并在左端补k个0,在算术运算中,则对操作数舍弃最低的k位,并在左端补k个最高有效位的值。
在二分法中,int middle = (left + right)/2中,(left+right)可能会溢出int范围,用
middle = left + ((right-left)>>1)替代/2,效率更高,注意移位运算的结果要用括号括起来后再与其他值计算,否则会计算错误
int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2