• 704. 二分查找


    题目:https://leetcode-cn.com/problems/binary-search/

    自己的代码:

    JAVA:
        public int search(int[] nums, int target) {
            int left = 0, right = nums.length - 1;
            while (left <= right){
                int mid = (left + right) / 2;//我的这种写法不多,因为left和right相加的结果可能会造成溢出
                if (nums[mid] == target) return mid;
                else if (nums[mid] > target) right = --mid;
                else if (nums[mid] < target) left = ++mid;
            }
            return -1;
        }

    官方:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-by-leetcode-solution-f0xw/

    方法一:二分查找
    在升序数组nums 中寻找目标值target,对于特定下标 i,比较 nums[i] 和 target 的大小:

    • 如果nums[i]=target,则下标 i 即为要寻找的下标;
    • 如果 nums[i]>target,则 target 只可能在下标 i 的左侧;
    • 如果 nums[i]<target,则 target 只可能在下标 i 的右侧。

    基于上述事实,可以在有序数组中使用二分查找寻找目标值。
    二分查找的做法是,定义查找的范围[left,right],初始查找范围是整个数组。每次取查找范围的中点 mid,比较 nums[mid] 和 target 的大小,如果相等则 mid 即为要寻找的下标,如果不相等则根据 nums[mid] 和 target 的大小关系将查找范围缩小一半。
    由于每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(logn),其中 n 是数组的长度。
    二分查找的条件是查找范围不为空,即left≤right。如果target 在数组中,二分查找可以保证找到 target,返回target 在数组中的下标。如果 target 不在数组中,则当 left>right 时结束查找,返回 -1。

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

    以下是C++:

  • 相关阅读:
    vuex mapstate_学习 vuex 源码整体架构,打造属于自己的状态管理库
    正则表达式
    对 Kubernetes 部署进行故障排除的视觉指南
    Uber Go 语言编码规范
    云原生训练营结课总结
    谈谈 Kubernetes Operator
    npm run serve报错
    BATIS PLUS实体类中字段映射MYSQL中的JSON格式
    PHPCMS V9静态化HTML生成设置及URL规则优化
    phpcmsV9 文章页时间问题
  • 原文地址:https://www.cnblogs.com/wltree/p/15377127.html
Copyright © 2020-2023  润新知