鱼C论坛

 找回密码
 立即注册
查看: 2769|回复: 1

二分法--搜索旋转排序数组

[复制链接]
发表于 2017-9-6 21:23:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题意:假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。假设数组中不存在重复的元素。例:给出[4, 5, 1, 2, 3]和target=1,返回 2;给出[4, 5, 1, 2, 3]和target=0,返回 -1。
答案代码如下:
  1. class Solution(object):
  2.     def search(self, nums, target):

  3.         if not nums:
  4.             return -1

  5.         start, end = 0, len(nums) - 1
  6.         while start + 1 < end:
  7.             mid = start + (end - start) / 2
  8.             if nums[mid] == target:
  9.                 return mid
  10.             elif nums[mid] > nums[start]:
  11.                 if target >= nums[start] and target <= nums[mid]:
  12.                     end = mid
  13.                 else:
  14.                     start = mid
  15.             else:
  16.                 if target >= nums[mid] and target <= nums[end]:
  17.                     start = mid
  18.                 else:
  19.                     end = mid

  20.         if nums[start] == target:
  21.             return start
  22.         if nums[end] == target:
  23.             return end
  24.         return -1
复制代码

两个问题:
问题1:根据题意用二分法,但是为什么条件是用mid和start比较,而不是一般二分法是mid和target比较?
问题2:if target >= nums[start] and target <= nums[mid]这个得else是什么?target <= nums[start] and target >= nums[mid]?两个条件还加了and,这个怎么想也想不明白。。
辛苦大家,麻烦帮忙解答我得问题,谢谢,谢谢!!
辛苦啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-9-7 22:55:01 | 显示全部楼层
第1: mid和start 是列表的下标。
第2:你上百度搜二分法,再深入了解下什么叫二分法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-23 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表