zoukankan      html  css  js  c++  java
  • leetcode笔记——35.搜索插入位置

    0.问题描述

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

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    示例 4:

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

    1.问题分析

    典型的二分查找,虽然不知道leetcode的数据为什么暴力搜索比二分法的时间还短。

    但是第一次写的也太丑啦吧喂!

    简单的代码才见功力呀。

    2.代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    class Solution {
    public:
    int searchInsert(vector<int>& nums, int target) {
    int i,mid;
    int low=0,high=nums.size()-1;

    if(target>nums[high]){
    return high+1;
    }
    if(target<nums[low]){
    return 0;
    }
    if(target==nums[low]){
    return low;
    }< 大专栏  leetcode笔记——35.搜索插入位置 - CrowFeabr/> while(high-low>1){
    if(target==nums[low]){
    return low;
    }
    if(target==nums[high]){
    return high;
    }
    mid=(low+high)/2;
    if(nums[mid]==target){
    return mid;
    }
    else if(nums[mid]<target){
    low=mid;
    }
    else{
    high=mid;
    }
    }
    if(nums[mid]<target){
    return mid+1;
    }
    else{
    return mid;
    }
    }
    };

    太!丑!了!

    虽然判断多了肯定快,但是太丑了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Solution {
    public:
    int searchInsert(vector<int>& nums, int target) {
    int i,mid;
    int low=0,high=nums.size()-1;

    while (low <= high ){
    mid = (low + high )/2;
    if (nums[mid] < target)
    low = mid + 1;
    else if ( nums[mid] > target)
    high = mid - 1;
    else
    return mid;
    }
    if(nums[mid]<target){
    return mid+1;
    }
    return mid;
    }
    };

    几个要点:

    • low<=high
    • low=mid+1
    • high=mid-1
    • return mid




  • 相关阅读:
    cjss 像编写css 一样开发web应用
    GitLab : Omnibus Installer
    集成omnibus-ctl 开发一个专业的软件包管理工具
    Chocolatey 方便的windows 包管理工具
    Omnibus-ctl: What is it and what can it do for you?
    omnibus-gitlab 架构学习
    Omnibus 安装
    rbenv mac&&linux 安装简单说明
    使用rbenv 进行ruby 多版本的管理
    vlang module 使用
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12037925.html
Copyright © 2011-2022 走看看