美文网首页
二分查找及其延伸

二分查找及其延伸

作者: 风起天蓝 | 来源:发表于2017-08-24 22:12 被阅读0次

1.基本概念

二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。
递归法

   public int binarySeach(int[] nums, int left, int right, int target){
        if(left <= right) {
            int mid = (left + right) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] > target) {
                return binarySeach(nums, left, mid - 1, target);
            } else {
                return binarySeach(nums, mid + 1, right, target);
            }
        }else{
            return -1;
        }
    }

非递归法

    public int binarySearch1(int[] nums, int target){
        int left = 0,right = nums.length-1;
        while (left <= right){
            int mid = (left + right)/2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] > target){
                right = mid-1;
            }else{
                left = mid+1;
            }
        }
        return -1;
    }

2. Find Minimum in Rotated Sorted Array(Leetcode153)

有序旋转数组寻找最小值

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
You may assume no duplicate exists in the array.
思路:

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

3. Search in Rotated Sorted Array(Leetcode 33)

有序旋转数组里寻找固定的一个值

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
You may assume no duplicate exists in the array.

思路:

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

相关文章

  • 二分查找及其延伸

    1.基本概念 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大...

  • 算法

    泽毛的简书 面试算法知识梳理(8) - 二分查找算法及其变型

  • 二分查找及其扩展

    在有序数组中,二分查找是效率较高的查找算法。二分查找一般有递归和迭代 对有序数组查找指定数字在数组中出现的次数//...

  • 二分查找及其变种

    二分查找,也叫做折半查找。 二分查找是在已经拍好序的数组中,每次取中间值与待查关键字比较,如果中间位置的值笔待查关...

  • 二分查找及其变种

    一、 二分查找 如无特殊说明,本文中所有用到的待查数组均为从小到大顺序。 1.1 无重复元素的二分查找 实现C++...

  • 二分查找及其变种

    二分查找是非常基础的算法,日常应用和面试中都极常见。其思想简单,不再赘述,但想要写好二分查找,也并不是那么容易的。...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 优秀算法笔记汇总

    一文带你搞定二分查找及其多个变种[https://leetcode-cn.com/problems/find-fi...

  • 二分查找及其变形与Python的bisect模块的关系

    首先,我们完成了二分查找及其变形的 3 个函数的模板: 1、binsearch(nums, target):标准的...

网友评论

      本文标题:二分查找及其延伸

      本文链接:https://www.haomeiwen.com/subject/vbkydxtx.html