排序二分查詢 自動完成 APP

2021-09-25 21:31:38 字數 2367 閱讀 7391

知識點學習

一:定義pair型別變數,存入vector陣列中,可以根據pair型別變數的第乙個位置的資料直接排序

二:關於lower_bound()函式和upper_bound()函式

學習部落格:

作用是利用二分查詢方法對乙個有序的陣列進行查詢

若陣列是從小到大排序,可利用下面兩種方法二分查詢:

lower_bound(begin,end,num)   陣列從begin到end中查詢乙個大於或等於num的值 ,並返回該值的位址,並通過返回的位址減去陣列的首位址即可找到對應值的下標;        若找不到則返回end

upper_bound(begin,end,num)   陣列從begin到end中查詢乙個大於num的值,並返回該值的位址,並通過返回的位址減去陣列的首位址即可找到對應值的下標;               若找不到則返回end       

若陣列是從大到小排序,可對函式進行過載

lower_bound(begin,end,num,greater())           

upper_bound(begin,end,num,greater())      原理同上 

三:make_pair()函式

生成乙個pair物件,用處很多,可以用於這道題中把兩個變數新增到vector陣列中, 也可以對函式為pair型別傳參時可以用到make_pair()

四:substr()函式

s.substr(begin,size)表示對s字串,從begin下標開始,長度為size大小的字串

時間限制: 1 sec  記憶體限制: 256 mb

提交: 236  解決: 63

[提交] [狀態] [命題人:admin]

題目描述

題目描述

輸入第一行兩個整數 n,m,表示詞庫的單詞個數和 bessie 的詢問次數。

接下來 n 行,每行乙個字串,表示 bessie 的常用單詞,輸入的第 i 個字串在詞庫中編號為 i。

接下來 m 行,每行乙個整數 k 和乙個字串 s,表示 bessie 的詢問,意義是詢問詞庫中以 s 為字首的字典序第 k 小的單詞在詞庫中的編號。

輸出對於每次詢問輸出乙個整數,表示以s為字首的字典序第 k 小的單詞在詞庫中的編號;如果不存在這樣的單詞,輸出 −1。

複製樣例資料

10 3

dabba

abdaa

aaaaa

aababc

acdadba

4 a2 da

4 da

樣例輸出

3

1-1

提示

(1) 以 a 為字首的單詞有 ,其中字典序第 4 小的是 ab,是詞庫的第 3 個單詞。

(2) 以 da 為字首的單詞有 ,其中字典序第 2 小的是 dab,是詞庫的第 1 個單詞;沒有第 4 小的單詞。

對於 20% 的資料,1≤ 詞庫的字母總量,詢問的字母總量 ≤103。

對於 100%的資料,1≤ 詞庫的字母總量,詢問的字母總量 ≤106,保證詞庫里的單詞兩兩不同,所有字串只包含小寫字母。

題意:給定n,表示詞庫中存在n個單詞,每次詢問乙個字串s和數字k,表示要找到乙個以以字串s 為字首的第k小的字串,並輸出該字串的最初下標

題解:用pair儲存字串和對應的編號,並存入vector陣列中

對vector陣列排序,注意pair的第乙個位置存字串,第二個位置存編號,因為排序的時候第乙個位置的優先順序高,可以直接根據字典序排序

使用者lower_bound函式進行二分查詢,返回對應位置的編號,判斷即可

**

#includetypedef long long ll;

const int mod=1000000007;

const int n=9;

using namespace std;

typedef pairpii;

typedef pairpll;

typedef pairpsi;

vectorvec;

ll n,m;

char str[5000007];

int main()

//for(int i=0;i=stmp.size())&&vec[slen+k-1].first.substr(0,stmp.size())==stmp)

printf("%d\n",vec[slen+k-1].second+1);

else

printf("-1\n");

}return 0;

}

二分查詢排序

static final int n 15 static void quicksort int arr,int left,int right 快速排序演算法 if ltemp rtemp ltemp if leftx high mid 1 else low mid 1 return 1 未找到 pu...

排序 二分查詢

實現歸併排序 快速排序 插入排序 氣泡排序 選擇排序 堆排序 選做 完成leetcode上的返回滑動視窗中的最大值 239 這是上一期第三天的任務進行保留 涉及佇列可以對第二天進行整理複習 程式設計實現 o n 時間複雜度內找到一組資料的第 k 大元素 def insert sort alist n...

二分查詢折半查詢排序

在乙個有序的陣列中,折半查詢乙個元素key,如果能找到返回陣列的下表,如果找不到,返回 1。實現如下所示 二分查詢法 author jcm 2016年8月6日 public class binaryserach int flag binarysearch a,19 if flag 1 system....