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: 2Example 2: Input: [1,3,5,6], 2
Output: 1Example 3: Input: [1,3,5,6], 7
Output: 4Example 4: Input: [1,3,5,6], 0
Output: 0复制代码

翻译:

给定一个排序数组和一个目标值,如果找到目标,返回索引。如果没有,返回按顺序插入的索引所在的位置。
您可以假定数组中没有重复项。
示例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


解题思路

本题主要是为了找值,如果和目标值相等,就返回下标,如果没有找到,则返回离它最近且小于它的值的下标。本题可以用遍历解决,也可以使用二分法处理。

解题方法

  1. 第一种解体方法,按照我们的思路来编辑,代码如下

        if (nums.length < 0) {return 0;}for (int i = 0; i < nums.length; i++) {if (nums[i] >= target) {return i;}}return nums.length;
    复制代码

    时间复杂度: 该方案用了一层循环,循环度为n,即T(n)=O(n)

    空间复杂度: 该方案并没有使用额外度空间去存储,所以空间复杂度还是O(1);

  2. 第二种解题方法,是使用了二分查找的方式,代码如下: public int searchInsert(int[] nums, int target) { if (nums.length < 0) { return 0; }

     return serch(nums, 0, nums.length, target);
    复制代码

    }

    private int serch(int[] nums, int start, int end, int target) {

     if (start >= end) {return start;}int mod = (start + end) / 2;if (nums[mod] == target) {return mod;}if (nums[mod] < target) {return serch(nums, mod + 1, end, target);}if (nums[mod] > target) {return serch(nums, start, mod, target);}return 0;
    复制代码

    }

    __时间复杂度__:
    该方案用了递归二分查找,即T(n)=O(nlogn)__空间复杂度__:
    该方案并没有使用额外度空间去存储,所以空间复杂度还是O(1);
    复制代码
  3. 第三种解题方案是针对与第二种解题优化的,递归查找在数据量足够大的情况下,性能略差,所以使用循环来解决递归。代码如下:

    if (nums.length < 0) {return 0;}int index = 0;int len = nums.length;while (index < len) {int mod = (index + len) / 2;if (nums[mod] == target) {return mod;} else if (nums[mod] > target) {len = mod;} else {index = mod + 1;}}return index;
    复制代码

    时间复杂度: 该方案用了递归二分查找,即T(n)=O(nlogn)

    空间复杂度: 该方案并没有使用额外度空间去存储,所以空间复杂度还是O(1);

总结

本题的大致解法如上所诉,但是可以更改的方式很多,运用循环,二分法来进行对本题的解答。

转载于:https://juejin.im/post/5cdb83b2e51d453b557dc37f

LeetCode集锦(十一) -第35题 Search Insert Positio相关推荐

  1. 【二分法】LeetCode 35. Search Insert Position

    LeetCode 35. Search Insert Position Solution1:我的答案 class Solution { public:int searchInsert(vector&l ...

  2. LeetCode - 35. Search Insert Position

    35. Search Insert Position Problem's Link ---------------------------------------------------------- ...

  3. [LeetCode]Array主题系列{35,39,40,48题}

    1. 内容介绍 开一篇文章记录在leetcode中array主题下面的题目和自己的思考以及优化过程,具体内容层次按照{题目,分析,初解,初解结果,优化解,优化解结果,反思}的格式来记录,供日后复习和反 ...

  4. # LeetCode集锦(四) - 第13题 Roman To Integer

    LeetCode集锦(四) - 第13题 Roman To Integer 问题 Roman numerals are represented by seven different symbols: ...

  5. LeetCode集锦(八) - 第26题 Remove Duplicates From Sorted Array

    LeetCode集锦(八) - 第26题 Remove Duplicates From Sorted Array 问题 Given a sorted array nums, remove the du ...

  6. LeetCode集锦(十) - 第28题 Implement StrStr

    LeetCode集锦(十) - 第28题 Implement StrStr 问题 Implement strStr().Return the index of the first occurrence ...

  7. LeetCode算法入门- Search Insert Position -day19

    LeetCode算法入门- Search Insert Position -day19 题目描述 Given a sorted array and a target value, return the ...

  8. 【LeetCode 剑指offer刷题】矩阵题1:4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)...

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 74. Search a 2D Matrix Write an efficient algorithm that s ...

  9. leetcode -- Search Insert Position

    2019独角兽企业重金招聘Python工程师标准>>> Search Insert Position Given a sorted array and a target value, ...

最新文章

  1. 怎样在swift中创建CocoaPods
  2. Xamarin只言片语系列
  3. java面试题标签_java面试笔试题 (WEB)
  4. nav 计算机网络_CTO下载-计算机网络课件(配套韩立刚老师课程).ppt
  5. 如何使用SAP UI5 SDK网站查询指定控件的属性如何使用
  6. shell批量修改后缀_bash批量修改文件名称的方法小结(增加,去除,修改后缀)
  7. java中rtsp转m3u8_记录:通过ffmpeg rtsp转 http m3u8
  8. SQL Server中的尾日志备份和还原
  9. 解决子级用css float浮动 而父级div没高度不能自适应高度
  10. layUI数据表格可编辑表格单元格值修改之后获取修改前的值
  11. 距离考研还有2天,我还活着
  12. mysql中的select into 与insert into语句用于备份数据
  13. hadoop远程调试
  14. [label][WorldPress] 一个很方便查找定位WorldPress源代码位置的网址
  15. 微信小程序实现九宫格切图,保存功能!
  16. 电影里的机械手臂,和现实究竟有多大区别?
  17. 7z制作自解压安装包(转载)
  18. 关于windows2008r2下access数据库网站报Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
  19. WinCC在C脚本创建电子签名对话框
  20. Tornado笔记——用Tornado搭建假单统计考勤系统(十)

热门文章

  1. 基于 AngularJS 的个推前端云组件探秘
  2. [网络流24题][CODEVS1914]运输问题(费用流)
  3. 华科 计算机网络实验,华中科技大学计算机网络实验(二)报告.doc
  4. C - Censor SCU - 4438
  5. MVC实现RadioButtonList
  6. (设计模式) (李建忠 C++) 总结
  7. 笔记本电脑如何回复出厂设置呢,有什么相关教程
  8. 智慧短信-情景卡片短信是如何实现的
  9. 路透社:腾讯音乐与KKR寻求竞标环球音乐 交易价值可达200亿欧元
  10. EP4: 无偏博弈和数学游戏