Leetcode35 Search Insert Position 解题思路(python)
本人编程小白,如果有写的不对、或者能更完善的地方请个位批评指正!
这个是leetcode的第35题,这道题的tag是数组,python里面叫list,需要用到二分搜索法
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], 5Output: 2
Example 2:
Input: [1,3,5,6], 2Output: 1
Example 3:
Input: [1,3,5,6], 7Output: 4
Example 4:
Input: [1,3,5,6], 0Output: 0
(https://leetcode.com/problems/search-insert-position/)
思路:
方法一:
这道题目最直观的解法肯定是一次循环for循环,因为数组(list)已经是排好序得了,考虑两种情况:
第一种:target不在数组中,那么比数组中最大的数字大的时候,他的返回值是数组的长度+1(即python中的len(array)),比数组中最小的数字小的在第二种情况中考虑,返回值是0
第二种:只要找出来第一个比target大的数字,那么这个数字所对应的位置就是返回值,
时间复杂度:O(n)
Python 代码实现:
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target > nums[len(nums)-1]:
return len(nums)
for i in range(len(nums)):
if nums[i] >= target:
return i
代码实现起来其实是很容易的,只有五行,但我用的第一种方法做完之后只beat了2.8%的提交者(2018/12/22,因为这个“%”肯定随着时间的推移而改变),说明肯定不是最优解
方法二:
既然是排好序的数组,那么我们知道二分搜索法的时间复杂度是log(n),(如果有人需要复习二分搜索发的话请见参考文献)
类似于方法一的第二种情况,我们是希望找到数组中第一个比target大的数字
这里我考虑的是以下几种情况:
第一种:target小于num[0]或者大于num[len-1]
第二种:target等于数组中的某数,即被二分搜索法找到
第三种,target在num[0]和num[len-1]中间,但不等于数组中的任何一个数
时间复杂度:log(n)
Python 代码实现:
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target <= nums[0]:
return 0
elif target > nums[len(nums)-1]:
return len(nums)
low,high = 0, len(nums)-1
while low <= high:
mid = (low+high) // 2
if target > nums[mid]:
low = mid + 1
elif target < nums[mid]:
high = mid - 1
else:
return mid
if target < nums[mid]:
return mid
elif target > nums[mid]:
return mid+1
if __name__ == '__main__':
nums = [1,2,3,4,6]
target = 5
print(searchInsert(0,nums,target))
我这里用的是while实现的二分搜索法,提交之后发现竟然还只是击败了32%的提交者,但感觉在时间复杂度上已经是最优的解了,
如果还有更好的解法欢迎大家留言或私信,谢谢 : )
参考文献:
1. 复习二分法连接:https://blog.csdn.net/djd1234567/article/details/45676829
Leetcode35 Search Insert Position 解题思路(python)的更多相关文章
- LeetCode: Search Insert Position 解题报告
Search Insert Position Given a sorted array and a target value, return the index if the target is fo ...
- 【LeetCode】35. Search Insert Position 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetc ...
- [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 ...
- LeetCode35 Search Insert Position
题目: Given a sorted array and a target value, return the index if the target is found. If not, return ...
- 35. Search Insert Position@python
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- [Leetcode][Python]35: Search Insert Position
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 35: Search Insert Positionhttps://oj.le ...
- Leetcode 二分查找 Search Insert Position
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...
- [LeetCode] 035. Search Insert Position (Medium) (C++)
索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 035. Sea ...
- [LC]35题 Search Insert Position (搜索插入位置)
①英文题目 Given a sorted array and a target value, return the index if the target is found. If not, retu ...
随机推荐
- 安装好visual studio后,如何添加新的工作负载和组件
重新运行visual studio安装程序,出现添加删除组件的界面,勾选即可.
- 关于STM32CubeMX使用LL库设置PWM输出
HAL和LL库 HAL是ST为了实现代码在ST家族的MCU上的移植性,推出的一个库,称为硬件抽象层,很明显,这样做将会牺牲存储资源,所以项目最后的代码比较冗余,且运行效率大大降低,运行速度受制于fla ...
- bootstrap模态框手动关闭遮盖层不消失
模态框中 加载了一个子页面 子页面中调教表单之后想根据执行结果手动关闭模态框,最初尝试了以下几种方案: 1.$("#myModal").modal('hide');//模态框关闭 ...
- 使用发射将JavaBean转为Map
import java.lang.reflect.Field; private static Map<String, Object> objectToMap(Object obj) thr ...
- iOS相关的ARM汇编
一.iOS汇编1.真机:arm64汇编寄存器指令 堆栈2.模拟器:x86汇编 二.lldb (lldb)register read x0 (lldb)register read w0 (lldb)re ...
- 【Rails App】 应用服务器从Passenger切换为Puma, Grape出现线程安全问题
Grape中的代码如下: def market @market ||= Market.find(params[:id]) end @market基于类层次的实例变量,属于非线程安全,如果一直使用多线程 ...
- Unity3D-RayMarch-几何图元0
效果图: 将下面的shader代码对应的Material拖给一个面片,即可看到效果. shader代码: // Upgrade NOTE: replaced '_Object2World' with ...
- Visual Studio连接Oracle数据库
一.安装Oracle Developer Tools for Visual Studio 2015 其他的什么client一概不要装,装了的直接卸载. 下载时需要登录,如果之前已经注册账号,提醒一下密 ...
- mac sublime3 无法安装Package Control
一.在线安装 1.打开sublime,Ctrl+` 打开控制台, 输入 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedc ...
- 颜色16进制转为RGB格式
<script> 2 function getRGB(str){ var arr = str.split(""); var myred = arr[1]+arr[2]; ...