赞
踩
这篇博客的二分用的都是左闭右闭的区间,对于二分来说还是我还是习惯这样写
最传统的二分查找,用左闭右闭写
- int search(vector<int>& nums, int target) {
- int left = 0;
- int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]
- while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <=
- int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2
- if (nums[middle] > target) {
- right = middle - 1; // target 在左区间,所以[left, middle - 1]
- } else if (nums[middle] < target) {
- left = middle + 1; // target 在右区间,所以[middle + 1, right]
- } else { // nums[middle] == target
- return middle; // 数组中找到目标值,直接返回下标
- }
- }
- // 未找到目标值
- return -1;
- }
左闭右开来写&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。