STL 二分查詢 去重 全排列

2021-09-10 16:44:41 字數 1387 閱讀 8244

二分查詢適用於有序序列。

lower_bound()函式

返回第一次出現大於等於那個要查詢的數的位址

upper_bound()函式

返回的是第乙個比要查詢的數大的數的位址  (注意  這裡是大於  不包括等於)

//返回乙個迭代器,表示第乙個大於等於val的元素,如果不存在這樣的元素,則返回end。

lower_bound(beg, end, val);

lower_bound(beg, end, val, comp);//自定義過載運算子

//返回乙個迭代器,表示第乙個大於val的元素,如果不存在這樣的元素,則返回end。

upper_bound(beg, end, val);

upper_bound(beg, end, val, comp);//自定義過載運算子

注意 返回的是乙個迭代器  也就是指標  所以  我們一般這樣寫

unique()

unique()是c++標準庫函式裡面的函式,其功能是去除相鄰的重複元素(只保留乙個),所以使用前需要對陣列進行排序

原理

它並沒有將重複的元素刪除,而是把重複的元素放到陣列的最後麵藏起來了 返回給你乙個指向不重複序列的最後乙個數字的迭代器,所以要用返回的迭代器減去a的首位址  就得到了 去重後的陣列長度

使用方法:對於長度為n陣列a,unique(a,a+n) - a   返回的是去重後的陣列長度

next_permutation(start,end),和prev_permutation(start,end)。

這兩個函式作用是一樣的,區別就在於前者求的是當前排列的下乙個排列,後乙個求的是當前排列的上乙個排列。至於這裡的「前乙個」和「後乙個」,我們可以把它理解為序列的字典序的前後,嚴格來講,就是對於當前序列pn,他的下乙個序列pn+1滿足:不存在另外的序列pm,使pn對於next_permutation函式,其函式原型為:

#include

bool next_permutation(iterator start,iterator end)

當當前序列不存在下乙個排列時,函式返回false,否則返回true

看具體用法:

例題  51nod1384

#include#include#include#includeusing namespace std;

int main()while(next_permutation(ch,ch+l));

return 0;

}

離散化 去重 二分查詢

離散化是程式設計中乙個常用的技巧,它可以有效的降低時間複雜度。其基本思想就是在眾多可能的情況中,只考慮需要用的值。離散化可以改進乙個低效的演算法,甚至實現根本不可能實現的演算法。要掌握這個思想,必須從大量的題目中理解此方法的特點。例如,在建造線段樹空間不夠的情況下,可以考慮離散化。1 排序 2 去重...

stl 二分查詢

在stl中對二分查詢進行了封裝,有兩種 upper bound,lower bound。例如 pos lower bound a,a n,value 查詢value值在長度為n的陣列a中的位置 關於返回值,函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於...

STL 二分查詢

實現原始碼 1.在乙個遞增的陣列 或vector 中查詢元素屬於 s e 的下標 2.查詢遞增陣列中元素是否存在 使用binary search 注 對於結構體,要麼過載小於符號 bool operator 要麼定義有小於符號含義的cmp函式。3.應用在遞減序列中 include include i...