Leetcode小技巧自我总结

这篇博客探讨了位操作在数组处理中的应用,如找到数组中最后一位不为0的数;同时讲解了如何判断两个数的某位是否相同。还涉及二分查找中的优化技巧,如取偏大的中间值。此外,介绍了字符串长度的计算方法以及回文的计算规律。在二叉树部分,解释了寻找前驱节点的方法和中序遍历验证二叉搜索树的逻辑。最后提到了字母大小写的转换规则。
摘要由CSDN通过智能技术生成

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生成滞涨网络~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值