整数二分
本文最后更新于-1天前,其中的信息可能已经过时,如有错误请发送邮件到2392862431@qq.com
  1. 寻找左边的端点 mid=(l+r+1)/2;(为何l+r+1,因为边界点的问题,不加会有死循环的问题)if(check(mid))—————>true: l=mid,[mid,r] false: r=mid-1,[l,mid-1];
    1. 寻找右边的端点 mid=(l+r)/2;if(check(mid))————–>true: r=mid,[l,mid] false: l=mid+1,[mid+1,r];

思想:双指针算法。

二分一定可以得出一个最终结果,但是不代表题目一定有符合条件的解,只是二分找到了一个符合或者最接近题目所需的答案。

思路:

1、确定边界点.

2、确定check条件。

3、根据true和false分别更新区间

4、检查二分结果是否符合题目的要求。

第一种模板:

寻找左侧的端点:

while(l<r)
{
   int mid=(l+r)/2;   //确定边界值
   if(a[mid]>=x)
  {
       r=mid;
  }
   else
  {
       l=mid+1;
  }
   
}

第二种模板:

寻找右侧端点:

while(l<r)
{
    int mid=(l+r)/2;
    if(a[mid]<=x)
    {
        l=mid;
    }
    else
    {
        r=mid-1;
    }
}

总结: 能用单调性写的题目一定能用二分来写,但反过来不行,二分解题一般给的序列是有序的,一般分为左右两区域,一部分符合条件,一部分不符合。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇