【LeetCode with Python】 Search Insert Position标签: LeetCodeLeetCode with PythonPython 2014-09-21 17:50
1027人阅读
评论(0)
收藏
举报 分类: LeetCode with Python(103) 版权声明:本文为博主原创文章,未经博主允许不得转载。
博客域名: http://www.xnerv.wang
原题页面: https://oj.leetcode.com/problems/search-insert-position/
题目类型:二分查找
难度评价:★★
本文地址: http://blog.csdn.net/nerv3x3/article/details/39453389
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.
Here are few examples.[1,3,5,6]
, 5 → 2[1,3,5,6]
, 2 → 1[1,3,5,6]
, 7 → 4[1,3,5,6]
, 0 → 0
【Python - Search Insert Position】 二分查找的一个变种。如果找到了target,就返回下标(正常的二分查找逻辑),否则就返回插入的位置。二分查找容易搞晕的是到底是返回left还是right,注意到left最终一定停在target上,或停在target的“位置”的右边,所以显然找不到target时,应该返回left的下标作为插入位置。
[python]view plain copy print ?
- class Solution:
- # @param A, a list of integers
- # @param target, an integer to be inserted
- # @return integer
- def searchInsert(self, A, target):
- if None == A:
- return 0
- len_A = len(A)
- if target > A[len_A - 1]:
- return len_A
- if target < A[0]:
- return 0
- left = 0
- right = len_A - 1
- while left <= right:# also can be left < right
- mid = (left + right) / 2
- if A[mid] < target:
- left = mid + 1
- elif A[mid] > target:
- right = mid - 1
- else:
- return mid
- return left
推荐阅读
- Leetcode35 搜索插入位置
- Data|单链表的增删查改
- 软件编程|STL使用总结
- Probabilistic|一次遍历等概率选取字符串中的某个字符
- 欧几里得算法(即辗转相除法)的时间复杂度log(N)的简洁证明
- 八皇后问题 回溯递归 C语言版
- memcopy
- HMM与序列标注
- 计算复杂性理论