搜索在 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

更新于:10-6-2020

453 次浏览

职业之旅

通过完成课程获得认证

开始学习
广告