数据结构与算法——二分查找

注:文章仅做个人记录
参考视频:

左程云--算法讲解006

相关题目链接:
力扣704.二分查找
力扣744.寻找比目标字母大的最小字母
力扣162.寻找峰值
解答:
1.力扣704.二分查找
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int len = nums.size();
        int l = 0, r = len - 1, m = 0;
        while(l <= r){
            m = l + ((r - l) >> 1);
            if(target == nums[m]){
                return m;
            }else{
                if(target > nums[m]){
                    l = m + 1;
                }else{
                    r = m - 1;
                }
            }
        }
        return -1;
    }
};
2.力扣744.寻找比目标字母大的最小字母
class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        int len = letters.size();
        int l = 0, r = len - 1, m = 0;
        char ans = letters[0];
        while(l <= r){
            m = l + ((r - l) >> 1);
            if(letters[m] > target){
                ans = letters[m];
                r = m - 1;
            }else{
                l = m + 1;
            }
        }
        return ans;
        
    }
};
3.力扣162. 寻找峰值
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int len = nums.size();
        if (len == 1) {
            return 0;
        }
        if (nums[0] > nums[1]) {
            return 0;
        }
        if (nums[len - 2] < nums[len - 1]) {
            return len - 1;
        }
        int l = 1, r = len - 2, m = 0, ans = -1;
        while (l <= r) {
            m = l + ((r - l) >> 1);
            if(nums[m - 1] > nums[m]){
                r = m - 1;
            }else if(nums[m] < nums[m + 1]){
                l = m + 1;
            }else{
                ans = m;
                break;
            }
        }
        return ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值