C++ 新生二分法

//24.03.10

//寒假学的二分,都开学了才想着总结,笔者一开始学的时候不是很明白,做了一些题目后才略懂一点点,见笑了;

//首先是基础二分,类似公式,笔者是直接背下来了

//力扣二分查找原题

class Solution {
	public:
		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;
		}
};

 //本来笔者自己写了一个,但是没有Carl大佬写得好,就直接搬运了 hwh;(感谢Carl大佬)

//Carl大佬的代码随想录

//笔者之后又做了学长推荐的计蒜客的二分查找的题目,又学了lower_bound和upper_bound;

//一开始学长讲的没太听明白,就用万能的CSDN查了一下

//关于lower_bound( )和upper_bound( )的常见用法

//一开始  greater<type>() 没太听明白,笔者将其与sort排序中的 greater<type>() 一起记(其中的 type 是数据类型),这样就简单很多;

//这些大概就是二分查找初步吧……

~~~//仅当笔者个人备忘录使用。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值