• 力扣labuladong一刷day8共2题


    力扣labuladong一刷day8共2题

    704. 二分查找

    题目链接:https://leetcode.cn/problems/binary-search/
    思路:很经典的题目,二分查找写的时候要注意循环不变量,如果是左闭右闭的话,那么leftright是有意义的,如果是左闭右开的话,leftright是无意义的。

    class Solution {
        public int search(int[] nums, int target) {
            int left = 0, right = nums.length-1;
            while (left <= right) {
                int mid = left + (right-left)/2;
                if (nums[mid] == target) {
                    return mid;
                } else if (nums[mid] < target) {
                    left = mid+1;
                }else {
                    right = mid-1;
                }
            }
            return -1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在排序数组中查找元素的第一个和最后一个位置

    题目链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/
    思路:寻找左边界与右边界,均使用二分查找来找,要注意的是相等时如何走,找左边界nums[mid]==target时,应该继续往左找,right=mid-1,同理右边界也是如此。

    class Solution {
      public int[] searchRange(int[] nums, int target) {
            int left = getLeft(nums, target);
            int right = getRight(nums, target);
            return new int[]{left, right};
        }
        int getLeft(int[] nums, int target) {
            int left = 0, right = nums.length-1;
            while (left <= right) {
                int mid = left + (right-left)/2;
                if (nums[mid] >= target) {
                    right = mid-1;
                }else {
                    left = mid+1;
                }
            }
            if (left < 0 || left >= nums.length) return -1;
            return nums[left] == target ? left : -1;
        }
    
        int getRight(int[] nums, int target) {
            int left = 0, right = nums.length-1;
            while (left <= right) {
                int mid = left + (right-left)/2;
                if (nums[mid] <= target) {
                    left = mid+1;
                }else {
                    right = mid-1;
                }
            }
            if (right < 0 || right >= nums.length) return -1;
            return nums[right] == target ? right : -1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    软考 系统架构设计师系列知识点之设计模式(9)
    Spring源码十九:Bean实例化流程二
    webpack快速入门-基本使用
    一个基于容斥原理的概率模型
    C++ Memory Order 理解
    在Mission Planner上校准外置GPS罗盘
    java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署
    在 Mac M1 上运行 Llama 2 并进行训练
    python&selenium自动化测试实战项目
    springboot
  • 原文地址:https://blog.csdn.net/qq_43511039/article/details/134370426