zoukankan      html  css  js  c++  java
  • 二分查找 && 三分查找

    LeetCode34. Find First and Last Position of Element in Sorted Array

    题意:找出指定元素出现的范围,Ologn

    思路:两次二分

    class Solution {
    public:
        vector<int> searchRange(vector<int>& nums, int target) {
            int l = 0, r = nums.size() - 1;
            int lx = -1, rx = -1;
            while (l <= r) {
                int mid = (l + r) >> 1;
                if (nums[mid] < target) {
                    l = mid + 1;
                } else if (nums[mid] > target) {
                    r = mid - 1;
                } else {
                    lx = mid;
                    r = mid - 1;
                }
            }
            l = 0, r = nums.size() - 1;
            while (l <= r) {
                int mid = (l + r) >> 1;
                if (nums[mid] < target) {
                    l = mid + 1;
                } else if (nums[mid] > target) {
                    r = mid - 1;
                } else {
                    rx = mid;
                    l = mid + 1;
                }
            }
            vector<int> res;
            res.push_back(lx);
            res.push_back(rx);
            return res;
        }
    };
    View Code

    LeetCode33. Search in Rotated Sorted Array

    在旋转过的有序数组中查找指定元素

    二分查找就是判断target在前一半还是后一半,根据mid和两端元素的大小可以得到哪一半是有序的

    就可以判断target在不在这一半里

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int l = 0, r = nums.size() - 1;
            while (l <= r) {
                int mid = (l + r) >> 1;
                if (nums[mid] == target) return mid;
                if (nums[mid] > nums[r]) {
                    if (target < nums[mid] && target >= nums[l]) {
                        r = mid - 1;
                    } else {
                        l = mid + 1;
                    }
                } else {
                    if (target > nums[mid] && target <= nums[r]) {
                        l = mid + 1;
                    } else {
                        r = mid - 1;
                    }
                }
            }
            return -1;
        }
    };
    View Code
  • 相关阅读:
    Android官方命令深入分析之bmgr
    Android官方命令深入分析之AVD Manager
    Android 官方命令深入分析之android
    token的设置与获取
    SpringBoot使用Redis共享用户session信息
    thymeleaf资源加载问题(从Controller跳转)
    ajax传递数组,后台更新
    BootStrap表单验证用户名重复
    hadoop3.x.x错误解决
    Hadoop安装
  • 原文地址:https://www.cnblogs.com/pinkglightning/p/10347196.html
Copyright © 2011-2022 走看看