zoukankan      html  css  js  c++  java
  • Search Insert Position 查找给定元素在数组中的位置,若没有则返回应该在的位置

    Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

    You may assume no duplicates in the array.

    Here are few examples.
    [1,3,5,6], 5 → 2
    [1,3,5,6], 2 → 1
    [1,3,5,6], 7 → 4
    [1,3,5,6], 0 → 0

    如题所述,最直观的做法就是二分查找。不过在使用二分查找解决此问题时,需要多加小心,先考虑清楚所有情况,再开始编码。

    首先考虑边界:

    1. 若给定target小于数组第一个元素,返回0;
    2. 若target大于最后一个元素,返回n

    使用二分,结束循环条件应该是high-low=1的情况。

    例如[1,3,5,6]中查找2,二分一次后,low=0,high=1,此时A[low]=1,A[high]=3。

    若按照平常使用的二分查找就应该找不到元素exit了,但是要返回元素的值则需要再进一步处理,此时low+1,或high-1即为元素应该的位置。

    下面代码里我把target等于边界值(数组第1个和第n个)的情况放到最后比较了。

     1 class Solution {
     2 public:
     3     int searchInsert(int A[], int n, int target) {
     4         if(A == NULL || n < 1)
     5             return -1;
     6         if(target < A[0])
     7             return 0;
     8         if(target > A[n-1])
     9             return n;
    10         
    11         int low = 0;
    12         int high = n-1;
    13         
    14         int mid = 0;
    15         
    16         while(high-low>1){
    17             mid = low + (high - low)/2;
    18             if(A[mid] == target)
    19                 return mid;
    20             else if(A[mid] > target)
    21                 high = mid;
    22             else
    23                 low = mid;
    24         }
    25         
    26         if(high-low ==1)
    27             if(A[low] == target)
    28                 return low;
    29             if(A[high] == target)
    30                 return high;
    31             else
    32                 return low+1;
    33                 
    34     }
    35 };
  • 相关阅读:
    js 变量提升和函数提升原理
    解析PHP中intval()等int转换时的意外异常情况
    不要太相信自己的眼睛
    遇到乱码时的一些想法
    c++ --> 变量、常量与运算符
    [ActionScript3.0] 逻辑或"||=" ,等于"=="和全等于"==="
    [ActionScript3.0] 传递任意数量的参数
    [ActionScript3.0] 深表复制
    [ActionScript3.0] 为内建类添加方法
    Jmeter之内存溢出解决办法
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/4059057.html
Copyright © 2011-2022 走看看