搜索在 C++ 中插入的位置
假设我们有一个已排序的数组 arr 和一个目标值,我们必须在找到目标值时找到其索引。如果未找到,则返回将其按顺序插入时的索引。
因此,如果输入像 [1,3,4,6,6],而目标值为 5,那么输出将是 3,因为我们可以在索引 3 处插入 5,因此数组将变为 [1,3,4,5,6,6]
要解决此问题,我们将按照以下步骤操作:
n := A 的大小
如果 n < 1,则
返回 0
low := 0,high := n - 1
当 low <= high 时,执行以下操作:
mid := low + (high - low) /2
如果 A[mid] 与目标值相同时,则
返回 mid
否则,当 A[mid] > target 时,执行以下操作:
high := mid - 1,pos := mid
否则
low := mid + 1,pos := mid + 1
返回 pos
示例
为了更好地理解,让我们看看以下实现:
#include <bits/stdc++.h> using namespace std; class Solution { public: int searchInsert(vector<int>& A, int target) { int n = A.size(); if(n < 1) { return 0; } int low = 0; int high = n-1; int mid; int pos; while(low <= high) { mid = low + (high-low)/2; if(A[mid] == target) { return mid; } else if(A[mid] > target) { high = mid - 1; pos = mid; } else { low = mid + 1; pos = mid + 1; } } return pos; } }; main(){ Solution ob; vector<int&g; v = {1,3,4,6,6}; cout << (ob.searchInsert(v,5)); }
输入
{1,3,4,6,6},5
输出
3
广告