codecamp

二分法 查找

题目

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1

提示:

你可以假设 nums 中的所有元素是不重复的。 n 将在 [1, 10000]之间。 nums 的每个元素都将在 [-9999, 9999]之间。

经典解法

1.引入开头start=0,end=nums.length-1

2.因为是升序,所以如果中间的值也就是 half=start+(end-start)/2;nums[half]大于target的话说明target在half的后面,所以让start=half+1从后半段中寻找

同理,小于的时候从end=half-1前半段查找

3.直到找到返回下标,如果没有找到就会产生start>end,跳出while

class Solution {
    public int search(int[] nums, int target) {
        int start=0,end=nums.length-1;
        int half=0;  
        while(start<=end){
            half=start+(end-start)/2;
        if(nums[half]==target) return half;
        else if(nums[half]<target) start =half +1;
        else if(nums[half]>target) end =half -1;
       }
       return -1;   
    }

  
}

解法二:Python

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left, right = 0, len(nums) - 1
        while left <= right:
            pivot = left + (right - left) // 2
            if nums[pivot] == target:
                return pivot
            if target < nums[pivot]:
                right = pivot - 1
            else:
                left = pivot + 1
        return -1

算法
二分法 马戏团叠罗汉
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

趣味题

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }