704. 二分查找(javascript, python3)

1.题目

1.1中文

给定一个 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

1.2英文

Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

Example 1:
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:
Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

2.算法思想

在升序数组nums 中寻找目标值 target
1.在js中有nums.indexOf(target),可以直接找到目标值对应的下标,没有就会返回-1
2.二分查找算法的原理如下:
待查序列:nums;目标值: target

  1. 如果nums为空,那么就返回-1,并退出;这表示查找不到target。
  2. 如果nums不为空,则将它的中间元素与要查找的目标元素进行匹配,看它们是否相等。
  3. 如果相等,则返回该中间元素的索引,返回并退出;此时就查找成功了。
  4. 如果不相等,就再比较这两个元素的大小。
  5. 如果该中间元素大于目标元素[low,height] = [low,mid-1]
  6. 如果该中间元素小于目标元素[low,height] = [mid+1,height]
  7. 在新的待查序列上重新开始第1步的工作。
    二分查找之所以快速,是因为它在匹配不成功的时候,每次都能排除剩余元素中一半的元素。因此可能包含目标元素的有效范围就收缩得很快,而不像顺序查找那样,每次仅能排除一个元素。

3.代码运行

3.1 javascript

//这里没用算法
var search = function(nums, target) {
       return nums.indexOf(target)
};
var search = function(nums, target) {
        let low=0 ,height=nums.length-1
        while (low<=height){
            let mid= Math.floor((height-low)/2)+low
            if(nums[mid]==target){
                return mid
            }else if(nums[mid]>target){
                height=mid-1
            }else{
                low=mid+1
            }
        }
        return -1
};

3.2 Python3

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

4 小拓展

4.1 js中的整除运算

  Math.ceil(4/3); //向上整除 4/3=2;
  Math.floor(4/3); //向下整除 4/3=1;
  Math.round(5/2);//四舍五入  parseInt(5/2);//丢弃小数部分,保留整数部分

4.2 python3中的整除运算

(height-low)//2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值