1. 取出数组中最后一位不为0的数
LastRight = OriNum & (-OriNum +1)
2.判断两个数是否在某一位一致
if((num1 & num2) == 1)
3. 在进行二分的时候取偏大的数
int mid = l + (r-l+1)/2;
3. 字符串的长度
边界为[i,j]的子串,不包括边界的字符串长度为j-i+1
HASH[L.R] = HASH[L-1]*P^(R-L+1)
4. 回文的长度
长度为n的字符串存在2n-1个回文,回文左边界li为【n/2】,右边界ri为li+n%2,其中i的取值为0~2n-2
5. 二叉树找前驱节点
while (predecessor.right != null && predecessor.right != root) {
predecessor = predecessor.right;
}
5. 二叉树中序遍历(利用栈)
while (!stack.isEmpty() || root != null) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
// 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
if (root.val <= inorder) {
return false;
}
inorder = root.val;
root = root.right;
}
return true;
6. 字母大小写转换
大写转小写,小写转大写: ^(1<<5)
大写转小写,小写不变: |(1<<32)
小写转大写,大写不变: &~(1<<32)