二分答案 簡單題

2022-05-08 09:21:26 字數 1201 閱讀 4950

一、何時可以使用「二分答案」

不是任何題目都適合使用「二分答案」的,我sam觀察到一般有以下的一些特徵:

a. 候選答案必須是離散的 ,且已知答案的範圍是:[最小值min, 最大值max] (連續區間上不能進行二分操作)

例如,在題目「kth largest 第k大的數」中 ==> 答案是閉區間[a[1]b[1], a[n]b[n]]上的正整數

例如,在題目「drying 烘乾衣服」中 ==> 烘乾時間t∈[0,maxt], maxt=max

b. 候選答案在區間[min,max]上某種屬性一類一類的排列 (這樣就能在此屬性上進行二分操作 ),各個類別不交錯混雜

例如,在題目「kth largest 第k大的數」中 ==>

(候選答案)第k大的數的值:              a[1]b[1],  ... , a[n]b[n]

(屬性分類)>這個乘積的數有多少:      n^2-1     ...      0

例如,在題目「drying 烘乾衣服」中 ==>

(屬性分類)能否烘乾:  不能  不能   不能   能     ...    能               能

c. 容易判斷某個點 是否為答案(即二分過程中,mid指向的點是否為答案)

例如,在題目「kth largest 第k大的數」中 ==> λ∈[ a[1]b[1], a[n]b[n] ]

對於某個候選答案,如果「>λ的乘積個數"λ-1的乘積個數」≥k ,則答案為λ

例如,在題目「drying 烘乾衣服」中 ==>

需要尋找第乙個出現的「能」(true),即如果check(mid-1)==false && check(mid)==true ,則答案為mid.

【題目描述】:輸入n個數(0**:

1 #include2 #include3

4using

namespace

std;56

#define n 200000+10078

intn,m,sum;

9int

a[n];

1011

bool found(int

k)12

20return1;

21}2223

intmain()

2435 printf("

%d",l-1

);36

return0;

37 }

二分查詢簡單題

leetcode 35.search insert position 最普通的binary search,若target存在,則返回所在下標 若target不存在,則返回target待插入的位置,本質上就是實現lower bound函式 無論mid left right left 2,還是mid l...

二分查詢與二分答案

主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...

二分查詢和二分答案

1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...