二分法题目合集

1. 锯齿形数组找target

有一个数组,前半部分有序,后半部分也有序,前半部分的开头元素大于后半部分的结尾元素,请从这个数组中找出target。
解题思路:
一开始我们就可以根据target和数组结尾元素的大小关系确定target属于哪个部分,之后将target和mid比较时就能根据位于哪一部分去更新l,r。
代码:

if (taret > nums[r])
  while (l < r)
    m = (l+r) >> 1;
    if (nums[m] >= target)
      r = m
    else
      if (nums[l] > nums[r])
        r = m
      else
        l = m + 1
else
  while (l < r)
    m = (l+r)>>1
    if (nums[m] >= target)
      if (nums[l] > nums[r])
        l = m+1
      else
        r = m
    else
      l = m+1
posted @ 2024-08-05 23:20  Hidea  阅读(57)  评论(0)    收藏  举报