Python - Search Insert Position

【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 ?

  1. class Solution:
  2. # @param A, a list of integers
  3. # @param target, an integer to be inserted
  4. # @return integer
  5. def searchInsert(self, A, target):
  6. if None == A:
  7. return 0
  8. len_A = len(A)
  9. if target > A[len_A - 1]:
  10. return len_A
  11. if target < A[0]:
  12. return 0
  13. left = 0
  14. right = len_A - 1
  15. while left <= right:# also can be left < right
  16. mid = (left + right) / 2
  17. if A[mid] < target:
  18. left = mid + 1
  19. elif A[mid] > target:
  20. right = mid - 1
  21. else:
  22. return mid
  23. return left

    推荐阅读