题目链接
#pragma once #include运行结果 折半查找(二分查找) 根据题目的提示,可以采用二分查找的方法 核心代码如下#include using namespace std; class Solution { public: int searchInsert(vector & nums, int target) { cout << "目标值为:" << target << endl; int n = nums.size(); for (int i = 0; i < n; i++) { //返回大于等于目标值的数字对应的下表 if (nums[i] >= target) { return i; } } //如果全部遍历没有符合条件的,则放在最后 return n; } }; //打印容器 void show_vector(vector & v) { vector ::iterator it; for (it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; } int main() { //创建容器 vector v; v.push_back(1); v.push_back(3); v.push_back(5); v.push_back(6); //打印容器 cout << "测试容器:" << endl; show_vector(v); //测试 Solution S; int res = S.searchInsert(v, 7); cout << "索引为:" << res << endl; system("pause"); return 0; }
//使用二分法 class Solution { public: int searchInsert(vector& nums, int target) { //定义目标值在左闭右闭区间内 int n = nums.size(); int left = 0; int right = n - 1; while (left <= right) { int middle = (left + right) / 2; //中间值大于目标值 if (nums[middle] > target) { right = middle - 1; } //中间值小于目标值 else if (nums[middle] < target) { left = middle + 1; } //中间值等于目标值 else { return middle; } } //如果循环结束都没发现说明要插入的位置应该在最前面或者最后面 return right + 1; } };
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)