zoukankan      html  css  js  c++  java
  • Leetcode 35. 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.

    Example 1:

    Input: [1,3,5,6], 5
    Output: 2
    

    Example 2:

    Input: [1,3,5,6], 2
    Output: 1
    

    Example 3:

    Input: [1,3,5,6], 7
    Output: 4
    

    Example 1:

    Input: [1,3,5,6], 0
    Output: 0

    采用分治算法的思想,先从中间比较,然后看是哪一边,接着再分治,主要注意下标是从0开始,而且要想清楚边界条件如果target在数组的最左边,或者target在数组的最右边该怎么插入target。
     1 #include <stdio.h>
     2 
     3 #include <vector>
     4 
     5 class Solution {
     6 public:
     7     int searchInsert(std::vector<int>& nums, int target) {
     8         int index = -1;
     9         int begin = 0;
    10         int end = nums.size() - 1;
    11         while (index == -1){
    12             int mid = (begin + end) / 2;
    13             if (target == nums[mid]){
    14                 index = mid;
    15             }
    16             else if (target < nums[mid]){
    17                 if (mid == 0 || target > nums[mid - 1]){
    18                     index = mid;
    19                 }
    20                 end = mid - 1;
    21             }
    22             else if (target > nums[mid]){
    23                 if (mid == nums.size() - 1 || target < nums[mid + 1]){
    24                     index = mid + 1;
    25                 }
    26                 begin = mid + 1;
    27             }
    28         }
    29         return index;
    30     }
    31 };
    32 
    33 int main(){
    34     int test[] = {1, 3, 5, 6};
    35     std::vector<int> nums;
    36     Solution solve;
    37     for (int i = 0; i < 4; i++){
    38         nums.push_back(test[i]);
    39     }
    40     for (int i = 0; i < 8; i++){
    41         printf("i = %d index = %d
    ", i, solve.searchInsert(nums, i));
    42     }
    43     return 0;
    44 }

    通过~

  • 相关阅读:
    Buffer cache spillover: only buffers
    11g中如何禁用自动统计信息收集作业
    OTN中文技术论坛清净的ORACLE讨论之地
    关闭磁盘自动运行
    #error
    在VC++中实现无标题栏对话框的拖动
    string,CString,char*之间的转化
    关于注册表
    #pragma once
    extern "C"用法详解
  • 原文地址:https://www.cnblogs.com/Hwangzhiyoung/p/8641059.html
Copyright © 2011-2022 走看看