二分法:leetcode 704 . 二分法模板,35.搜索插入位置,74.搜索二維矩陣

704.二分查找

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

35.搜索插入位置

套模板

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

74.搜索二維矩陣

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix.length == 0 || matrix[0].length == 0)
            return false;
        int start = 0;
        int rol = matrix.length, col = matrix[0].length;
        int end = rol * col - 1,mid;
        while(start + 1 < end) {
            mid = start + (end - start) / 2;
            if (matrix[mid / col][mid % col] == target)
                return true;
            else if (matrix[mid / col][mid % col] < target)
                start = mid;
            else if (matrix[mid / col][mid % col] > target)
                end = mid;
        }
        if(matrix[start / col][start % col] == target)
            return true;
        if(matrix[end / col][end % col] == target)
            return true;
        return false;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章