zoukankan      html  css  js  c++  java
  • LeetCode(35):搜索插入位置

    Easy!

    题目描述:

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    你可以假设数组中无重复元素。

    示例 1:

    输入: [1,3,5,6], 5
    输出: 2
    

    示例 2:

    输入: [1,3,5,6], 2
    输出: 1
    

    示例 3:

    输入: [1,3,5,6], 7
    输出: 4
    

    示例 4:

    输入: [1,3,5,6], 0
    输出: 0

    解题思路:

    该题目只需要遍历一遍原数组,若当前数字大于或等于目标值,则返回当前坐标,如果遍历结束了,说明目标值比数组中任何一个数都要大,则返回数组长度n即可。

    C++解法一:

    1 class Solution {
    2 public:
    3     int searchInsert(vector<int>& nums, int target) {
    4         for (int i = 0; i < nums.size(); ++i) {
    5             if (nums[i] >= target) return i;
    6         }
    7         return nums.size();
    8     }
    9 };

    当然,我们还可以用二分搜索法来优化我们的时间复杂度,而且个人认为这种方法应该是面试官们想要考察的算法吧。

    C++解法二:

     1 class Solution {
     2 public:
     3     int searchInsert(vector<int>& nums, int target) {
     4         if (nums.back() < target) return nums.size();
     5         int left = 0, right = nums.size() - 1;
     6         while (left < right) {
     7             int mid = left + (right - left) / 2;
     8             if (nums[mid] == target) return mid;
     9             else if (nums[mid] < target) left = mid + 1;
    10             else right = mid;
    11         }
    12         return right;
    13     }
    14 };
  • 相关阅读:
    每天读一下,你就会改变
    C++ 反转字符串(原创)
    C++ string学习
    18种常见室内花卉的功效 (转自网络)
    UML建模教程
    孙鑫视频VC++深入详解学习笔记
    visual C++ 6.0开发工具与调试
    C++ typeid typename使用
    C++模板学习
    Working classes Code complete reading notes(6)
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9138166.html
Copyright © 2011-2022 走看看