Leetcode系列:二分查找

35. 搜索插入位置

class Solution {
    public int searchInsert(int[] nums, int target) {

        int len = nums.length;
        if(targetnums[len-1]) return len;
        int start = 0;
        int end = len-1;
        int middle =0;


        while(start

74. 搜索二维矩阵

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int right = matrix[0].length-1;
        int up = 0;

        while(up=0){
            if(matrix[up][right]=matrix.length) break;

            if(matrix[up][right]>target)
                right--;
            if(right<0) break;

            if(matrix[up][right]==target) 
                return true;
        }

        return false;
    }
}

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

class Solution {
    public int[] searchRange(int[] nums, int target) {

        if(nums.length==0) return new int[]{-1, -1};

        int start = 0;
        int end = nums.length-1;
        while(start=0 && nums[start]==target ) start--;
        while(end

33. 搜索旋转排序数组

class Solution {
    public int search(int[] nums, int target) {

        int index = 0;
        //找到反转处的下标
        for(int i=0; i nums[i+1]){
                index = i;
                break;
            }
        }

        int frontSearch = searchInsert(nums, target, 0, index);
        int lastSearch = searchInsert(nums, target, index+1, nums.length-1);

        if(lastSearch==-1)
            if(frontSearch==-1)
                return -1;
            else
                return frontSearch;
        else
            return lastSearch;
    }

    
    public int searchInsert(int[] nums, int target, int start, int end) {
        
        int len = nums.length;
        while(start
class Solution {
    public int search(int[] nums, int target) {
        int len = nums.length;

        if(len==0) return -1;
        if(len==1 && nums[0]==target) return 0;
        if(len==1 && nums[0]!=target) return -1;

        int start=0;
        int end=len-1;

        //注意<=
        while(start<=end){
            int middle = start + (end - start) / 2;

            if(nums[middle]==target)
                return middle;

            if(nums[start]<=nums[middle]){
                //左一半是有序的
                if(nums[start]<=target && target

153. 寻找旋转排序数组中的最小值

超明显写法Sleepy Ellis4vY

class Solution {
    public int findMin(int[] nums) {
        int len = nums.length;

        if(len==1 || nums[0]nums[right])
                left = middle+1;
            else
                right = middle-1;
        }
        return left;
    }
}

你可能感兴趣的:(算法,算法,leetcode,数据结构)