Leetcode刷题训练第二期

本文通过分析LeetCode中涉及递归和二分法的典型题目,如链表反转、子集XOR总和、最大水量问题和寻找矩阵中的最小元素等,探讨了递归和二分法在解决复杂问题时的关键策略。通过实例解析,解释了如何找到对应索引的节点、如何计算XOR值以及如何利用二分法进行高效查找。同时,文章强调了理解问题条件和正确遍历的重要性,为读者提供了深入理解这两种算法的实践指导。
摘要由CSDN通过智能技术生成

递归复习:

  • Leetcode 92: Reverse Linked List II

    • 解题关键:
      • 如何找到对应索引位置的node
      for (int i = 1; i < left; i ++) {
         pre = pre.next;
         leftNode = leftNode.next;
      }
        
      for (int i = 1; i < right; i ++) {
          rightNode = rightNode.next;
      }
      
      • 反转链表的写法
      while (leftNode != rightNode) {
          pre.next = leftNode.next;
          leftNode.next = rightNode.next;
          rightNode.next = leftNode;
          leftNode = pre.next;
      }
      
  • Leetcode 1863: Sum of All Subset XOR Totals

    • 解题关键:
      • 如何求XOR值
      curr ^ nums[idx]
      
      • 递归遍历找到所有子集,并叠加其XOR totals
      findSubSet(nums, idx + 1, curr ^ nums[idx]) + findSubSet(nums, idx + 1, curr)
      

数组

  • Leetcode 11: Container With Most Water
    • 解题关键:
      • 理解most water的计算条件
      ret = Math.max(ret, Math.min(height[left], height[right]) * (right - left));
      
  • Leetcode 88: Merge Sorted Array
    • 解题关键:
      • 使用merge sort,可参照Algorithms 4th Edition中Merge sort章节
  • Leetcode 42: Trapping Water
    • 解题关键:
      • 同11,理解trapping water成立的条件
      • 使用two pointers遍历,将符合条件的情况进行叠加
      while (left < right) {
          if (height[left] < height[right]) {
              if (height[left] > left_max) {
                  left_max = height[left];
              } else {
                  ret += left_max - height[left];
              }
              left ++;
          } else {
              if (height[right] > right_max) {
                  right_max = height[right];
              } else {
                  ret += right_max - height[right];
              }
              right --;
          }
      }
      

二分法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值