原创 LeetCode 33. 搜索旋轉排序數組 二分

題意:給一個旋轉數組和一個目標值target,求用O(logn)時間在數組中找出target值 思路:首先用二分找到旋轉後的開始索引,之後根據目標值和兩個子數組大小關係在子數組中再用二分即可。注意找開始索引和找目標值用的二分方法不

原创 NowCoder 調整數組順序使奇數位於偶數前面 指針

題意:給一個數組,要求使數組中奇數位於偶數前面且奇數與奇數,偶數與偶數之間相對位置不變 思路:可以用額外空間的話很簡單,開一個數組存奇數或者偶數即可;要求原地更改的話可以用指針,一個存偶數開始位置,另一個存偶數結束位置,每遇到一個

原创 Codeforces 1256B. Minimize the Permutation 貪心 STL

題意:給出一個排列,可以且僅可以對排列中某個位置相鄰元素進行一次操作,該操作交換兩元素位置,求出在進行操作後可以得到的最小字典序的排列 思路:水題,算是對STL的應用,主要是太久沒有碰代碼了,手癢的不行。因爲不管怎麼交換隻要最小的

原创 Codeforces 1223C. Save the Nature 二分 貪心

題意:給n張票的價格pi,每a張票價格的x%用作環保項目1,每b張票價格的y%用作環保項目2,爲了使投入環保項目的總額至少爲k,求出重新排列票的價格後需要賣出的最少的票數 思路:二分票數,用大頂堆來存儲票的價格,顯然a和b的公倍數

原创 Codeforces 1234D. Distinct Characters Queries 思維 STL

題意:有一串字符串,可以進行兩種操作,1 x y表示把x位置字符替換成y,2 l r表示查詢l到r間不同字符的個數,給q次詢問,對於每個詢問求出區間內不同字符個數 思路:這裏用到了一個比較巧妙的技巧,用26個set來存儲每個字母在

原创 LeetCode 24.兩兩交換鏈表中的節點 遞歸

題意:給定一個鏈表,要求兩兩交換鏈表中相鄰的兩節點,比如1->2->3->4變爲2->1->4->3 思路:最簡便的方法就是遞歸,頭結點的下一個節點是已經轉換好的節點的頭結點,之後再把原來頭結點的下一節點接到頭結點上即可 clas

原创 Codeforces 1195D1. Submarine in the Rybinsk Sea 快速冪 思維

題意:定義函數f(a,b)值爲b中所有位和a中所有位由b開始從右到左交叉,如f(1111,2222)=12121212,f(33,44444)=4443434,給出n個位數相同的數,求出每個數和其他所有數(包括自己)的f值的和,求

原创 POJ 2492 A Bug's Life 種類並查集

題意:bug有兩種性別,每個bug是兩個性別之一,現在給出兩個bug的關係,bug之間只允許異性戀,求出所有bug中是否存在同性戀 思路:種類並查集。每個節點賦予權值,根的權值爲兩節點權值的同或和,判斷根相同的兩節點權值是否相同即

原创 NowCoder 數組中的逆序對 歸併排序

題意:給一個數組,求出數組中存在的逆序對的個數,逆序對即兩數中前面的數字大於後面的數字 思路:暴力枚舉很簡單,複雜度爲O(n²),可以用歸併排序的性質,歸併後兩個子數組中設前面爲i,後面爲j,若array[i]>array[j],

原创 LeetCode 264.醜數 II DP

題意:給一個整數n,求出第n個醜數,醜數即爲只包含質因數2,3,5的數 思路:把質因數分別爲2,3,5的醜數看成3個子數組,把整個dp數組看成3個子數組的組合,取每個子數組的索引L1,L2,L3,則第k個醜數即爲min(dp[L1

原创 LeetCode 105.從前序與中序遍歷序列構造二叉樹 遞歸

題意:給出一個二叉樹的前序和中序遍歷,求出這個二叉樹 思路:首先枚舉中序遍歷找到根節點,之後再向左向右遞歸,並縮小遍歷範圍,若存在左節點左樹根就是start+1,右樹根位置可以根據當前根在中序和前序中的相對位置確定 class S

原创 POJ 2406 Power Strings KMP 最小循環節

題意:給出一個字符串,求出字符串中重複次數最多的子串的重複次數 思路:在複習一遍,n-fail[n]表示長度爲n的字符串中最小循環節的長度,首先求出fail數組,再求出串中最小循環節長度,若長度可被總長整除,則答案即爲總長/循環節

原创 XDU2019校賽現場賽覆盤

A. 不記得了,記得是道簽到題,之前菜的連做這道題都花了四十多分鐘,整場現場賽就做了這一道題,菜到無法直視 B. qko 的 aaaa + bbbb 題意:給一個4個字符的字符串,一個unsigned int可以用32

原创 POJ 3660 Cow Contest floyd dfs

題意:有n個奶牛,給出m個奶牛的關係,即某個奶牛的編程能力比另一個要強,求出能夠確定排名的奶牛的最大數量 思路:建立n個點m條邊的有向圖,某個點能夠確定排名,則其他所有點不是可以到達該點,就是可以由該點到達。可以用floyd來判斷

原创 LeetCode 95. 不同的二叉搜索樹 II 遞歸

題意:給一個整數n,求出1到n能夠構成的所有二叉樹 思路:可以用遞歸首先求出左子樹構成的列表和右子樹構成的列表,從1到n枚舉所有根節點,將每個左子樹和每個右子樹的根連到當前的根上,最底層可能是null,也可能只有一個節點,最頂層則