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

【算法】用java和python实现二分查找

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

【算法】用java和python实现二分查找

目录

目录

一、问题描述

描述

示例1

示例2

示例3

二、用python实现

三、用java实现

一、问题描述

描述

请实现无重复数字的升序数组的二分查找

给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1

数据范围:0 le len(nums) le 2times10^50≤len(nums)≤2×105 , 数组中任意值满足 |val| le 10^9∣val∣≤109

进阶:时间复杂度 O(log n)O(logn) ,空间复杂度 O(1)O(1)

示例1

输入:[-1,0,3,4,6,10,13,14],13

返回值:6

说明:nums为空,返回-1

示例2

输入:[],3

返回值:-1

说明:nums为空,返回-1

示例3

输入:[-1,0,3,4,6,10,13,14],2

返回值:-1

说明:2 不存在nums中因此返回 -1

二、用python实现
 class Solution:
    def search(self , nums: List[int], target: int) -> int:
     
        left = 0  # 数组最左边的数字的索引为0
        right = len(nums) - 1  # 数据最右边的数字的索引为len(nums) -1
        while left <= right:   #表示候选区有值
            mid = (left+right)// 2
            if nums[mid] == target:  #待查找的值就是mid时返回mid 也就是这个值的索引
                return mid          
            elif nums[mid] < target: #待查找的值如果在mid的右边,那么将新的查找区间的left移动到mid+1位置
                left = mid + 1
            else:           
                right = mid -1    #待查找的值如果在mid的左边,那么新的查找区间的right就移动到mid-1
        else :
            return -1  # 如果没找到待查找的值就返回-1

三、用java实现

实现思路每步和上面python的一样 我就不写了

public class Solution {
    
    public int search (int[] nums, int target) {
        // write code here
        int left = 0;
        int right = nums.length -1;
        while(left<=right){
            int  mid =(left+right)/2;
            if (nums[mid] == target){
                return mid;
            }
            else if(nums[mid] < target){
                left = mid +1;
            }else{
                right =mid -1;
            }
            
        }
          return -1;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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