• 关于二分查找的重新梳理 Leetcode704


    之前写二分代码的时候总是纠结判断条件,今天把最基础的二分查找题拿出来梳理一下脉络。

    class Solution {
        public int search(int[] nums, int target) {
            // 二分法,由于整数除法的舍位性,所以mid是可以取到left的位置,但是取不到right的位置,
            int n = nums.length;
            int left = 0;
            int right = n;  // 所以在设置right的时候,是永远不满足条件的边界值,比如说n是取不到的
            int mid = (left + right) / 2;
            while (left < right) {  // 当left和right就差一位的时候,需要思考怎么才能在简化判断条件的情况下不陷入死循环
                if (nums[mid] == target) 
                    return mid;
                else if (nums[mid] < target)
                    left = mid + 1; // 而left可以作为target的位置,所以在mid的基础上加了1,同时也为了满足跳出条件
                else 
                    right = mid;    // right或是大于target的值,还是取不到的值
                mid = (left + right) / 2;
            }
            return -1;
        }
    }
    
  • 相关阅读:
    多重背包
    摘花生
    完全背包问题
    01背包问题
    数字金字塔
    ES6 Object.assign()的用法
    umi---className设置多个样式
    npm 安装yarn
    html引入其他html的几种方式
    react打包去掉map文件
  • 原文地址:https://www.cnblogs.com/IO382/p/13360498.html
Copyright © 2020-2023  润新知