leetcode33题解_Search in Rotated Sorted Array

            题意:要在一个排好序的但是旋转过的序列中找给定的数字。
    (通常的题目是,比如:1,2,3,4,5,6,7.找这组序列中是否有7这个数,但是这个
序列在这个题目中是旋转过的,但是按哪个位置旋转不知道,比如旋转后是:4,5,6,7,1,2,3.
要在这个序列中找7,题目就要求我们写算法来找是否有这个数字)
      我的思路:
      直接遍历一遍,O(n)复杂度-_-。
      其他方法:
      比如有如下的旋转后的序列:
      [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

     找7

     将序列变成:

      [-F, -F, -F, -F, -F, -F, -F, -F, -F, -F, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

     如果是找16,序列变成:

     [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2, +F, +F,+F, +F,+F, +F,+F, +F,+F, +F]。

     抓住trick : 小的在后面,大的在前面,根据特点将某数字变为负无穷或者正无穷,然后再用二分法。
     将rotate后的排列分为前后两部分,前半部分是较大的数集,后半部分是较小的数集
     例如上面的排列中,
     前半部分:12, 13, 14, 15, 16, 17, 18, 19, 20, 21
     后半部分:2, 3, 4, 5, 6, 7, 8, 9, 10, 11
     因为旋转了,所以nums[0]头部位置很重要
     几种情况 num[ mid ] & target
    1. > nums[0] && target > nums[0] : 表明在同一部分中
    2. < nums[0] && target > nums[0] : +F  target > nums[0]说明target在前半部分,mid < nums[0]说明
    mid是后半部分的数,不考虑,因此,当前位置数置为+F
    3. > nums[0] && target < nums[0] : -F  target < nums[0]说明target在后面,mid > nums[0]说明
   从0到mid位都是大于taget的数字,当前位置数置为-F

   4. < nums[0] && target < nums[0] : 表明在同一部分中

   代码:略

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值