栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

704. 二分查找(javascript, python3)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

704. 二分查找(javascript, python3)

二分查找
  • 1.题目
    • 1.1中文
    • 1.2英文
  • 2.算法思想
  • 3.代码运行
    • 3.1 javascript
    • 3.2 Python3
  • 4 小拓展
    • 4.1 js中的整除运算
    • 4.2 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号