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 ...
随机推荐
- c++学习路线连接
https://blog.csdn.net/qq_36482772/article/category/7396881/4?
- FPGA驱动步进电机
步进电机 步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受 ...
- 内网ssh穿透
公司服务器没有公网IP,只有内网IP,利用自己的阿里云服务器(有公网ip)做ssh内网穿透,使得外网可访问.方法如下: 环境: 公司服务器和阿里云服务器均为 Ubuntu 操作系统, 需要修改阿里云服 ...
- 用7ch中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移位移。
应用举例:在屏幕的第12行,显示data段中以0结尾的字符串. assume cs:code data segment db data ends code segment start: mov ax, ...
- 推荐几个可以从google play(谷歌应用商店)直接下载原版APP的网站
http://apk-dl.com/ https://apkpure.com/ http://apk-downloaders.com
- linux 学习之路:ls命令使用
1.命令格式: Ls 显示指定工作目录下的目录内容 语法:ls [-alrtAFR] [name...] 2.命令参数: 3.命令功能: 显示列出目前工作目录所含之文件及子目录 4.命令范例: 列出根 ...
- python psycopg2 连接pg 建立连接池
# -*- coding: utf-8 -*-from psycopg2.pool import ThreadedConnectionPool,SimpleConnectionPool,Persist ...
- 欢迎来到Python世界
Python是一门优雅而健壮的解释型编程语言,它具有如下的特点: 易学 Python关键字少.结构简单.语法清晰.学习者可以在相对更短的时间内轻松上手. 易读 Python没有其它语言通常用来访问 ...
- Web性能和负载测试工具补充
压力测试文档:https://yq.aliyun.com/articles/377543https://www.cnblogs.com/ahjxxy/archive/2012/09/17/268899 ...
- 实验十四 第九组 张燕~杨蓉庆~杨玲 Swing图形界面组件
实验十四 Swing图形界面组件 8-11-29 理论知识 Swing和MVC设计模式 (1)设计模式(Design pattern)是设计者一种流行的 思考设计问题的方法,是一套被反复使用,多数人 ...