首页 > 编程语言 >牛客网高频算法题系列-BM17-二分查找-I

牛客网高频算法题系列-BM17-二分查找-I

时间:2022-10-08 20:33:24浏览次数:113  
标签:二分 BM17 target nums int 牛客 查找 low

牛客网高频算法题系列-BM17-二分查找-I

题目描述

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

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

原题目见:BM17 二分查找-I

解法一:二分查找法

首先,考虑特殊情况,判断如果数组为空,返回-1。

否则,使用low和high分别为数组的上下限,然后使用二分法判断数组中的元素,判断过程如下:

  • 首先,循环终止的条件是low大于high
  • 二分,mid取中间值
  • 如果mid所在的值等于target,则返回mid
  • 如果mid所在的值大于target,则更新high
  • 如果mid所在的值小于target,则返回low

最后,如果二分查找没找到等于target的值,返回-1。

代码

public class Bm017 {
    /**
     * 二分查找-I
     *
     * @param nums   int整型一维数组
     * @param target int整型
     * @return int整型
     */
    public static int search(int[] nums, int target) {
        // 如果数组为空,返回-1
        if (nums == null || nums.length == 0) {
            return -1;
        }
        // low和high分别为数组的上下限
        int low = 0, high = nums.length - 1;
        // 循环终止的条件是low大于high
        while (low <= high) {
            // 二分,mid取中间值
            int mid = (low + high) / 2;
            // 如果mid所在的值等于target,则返回mid
            // 如果mid所在的值大于target,则更新high
            // 如果mid所在的值小于target,则返回low
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] > target) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }

        // 如果二分查找没找到等于target的值,返回-1
        return -1;
    }

    public static void main(String[] args) {
        int[] nums = {-1, 0, 3, 4, 6, 10, 13, 14};
        // 测试用例,期望输出: 6
        System.out.println(search(nums, 13));
    }
}

\(1.01^{365} ≈ 37.7834343329\)
\(0.99^{365} ≈ 0.02551796445\)
相信坚持的力量!

标签:二分,BM17,target,nums,int,牛客,查找,low
From: https://www.cnblogs.com/kaesar/p/16770131.html

相关文章

  • 【算法浅谈】二分法
    二分法注意边界的开闭,以及除法自动取整的特性。publicintmySqrt(intx){//使用简单二分法进行排除得出开方结果intans=0;//对输入为0的情况......
  • 二分查找
    整数二分右边界如图:x为所需的边界,绿色范围为满足的区域,红色范围为不满足的区域如何一直二分找到x呢先设置一个mid=(l+r)/2;判断一下mid是否符合要求;如果结果符合,mid在x的左......
  • Codeforces Round #570 (Div. 3) C. Computer Game(二分)
    https://codeforces.com/contest/1183/problem/C题目大意:给定k的总时间,必须玩n局,每一局正常消耗a时间,插电玩消耗b时间问我们在能>0的剩余时间内玩完这n局下的可以最大......
  • 2022牛客国庆集训派对day6 A(极大矩阵计数)
    2022牛客国庆集训派对day6A(极大矩阵计数)A-All-oneMatrices_2022牛客国庆集训派对day6(nowcoder.com)题目求可以构成给出的01矩阵的全1极大矩阵数目思路悬线法可......
  • 2022牛客国庆集训派对day6 C 递归构造 归纳构造
    给出一个m你需要构造出来m个m维向量两两向量之间点乘为0向量每一维只能是1或-1保证m一定是2的幂次。直接构造出来那么大的显然不太可能发现不了什么比较好的规律。......
  • LeetCode二分搜索
    SearchinRotatedSortedArrayLeetCode/力扣先判断中间的和尾部的数字大小,再判断target和首尾中三个数字大小关系,如此便能进行二分搜索intsearch(vector<int>&nums,......
  • 二分图
    二分图的判定不存在奇数环。可以通过匈牙利算法,染色判定。booldfs(intx,intt){ st[x]=t; for(inti=head[x];i;i=ne[i]) { inty=ver[i]; if(!st[y]) { ......
  • Java二分查找代码实现
    Java二分查找代码实现及原理简要分析代码原理描述前提:已经有一个排好序的数组(否则需要先排序)定义左边界left,右边界right,确定搜索范围,循环执行二分查找(第3、4步骤)......
  • 「牛客网」45道JS能力测评经典题总结
    前言牛客网的45道JS能力评测题个人觉得是非常好的45道js基础检测题,基本就是对自己的JavaScript基础做一个比较全面的评估,包括if语句、循环体、基础操作符、setInterval、s......
  • CF1415D XOR-gun 题解 二分答案/贪心
    题目链接https://codeforces.com/problemset/problem/1415/D题目大意给定一个长为\(n\)的不降序列,每次操作可以任选相邻的两个数,并将这两个数替换为两个数按位异或的......