輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
分析:之前做過這道題,這次做的第乙個想法和之前一樣,首先要將數字轉成字串,然後比較字串的大小,而且比較的結果應該是「321」<「32」 && "32"<"3"
,或許我們可以這樣考慮「32」==「322」 && "3"=="33"
。所以需要這樣判斷,當比較 「321」 與 「32」 時,他們的前兩個字元相等,而 「321」 的第三個字元小於 「32」 的第二個字元,於是我們得出「321」<「32」
的結論。想法看起來十分複雜又難實現。
今天在紙上寫下「32132<32321」
的時候,突然腦袋開竅。我們可以通過判斷str1+str2
與str2+str1
的關係得到兩字串的大小啊!於是程式設計如下:
class
solution
string printminnumber
(vector<
int> numbers)
};
把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。
分析:最小的醜數是 1,並且除了 1 之外的所有醜數都是由其他醜數 *2 或 *3 或 *5 得到的。設定乙個醜數序列 ugly,每次找到乙個稍大的醜數就放進佇列,再設定三個指標 pos2、pos3、pos5,分別指向 2、3、5 三個數想要乘的醜數。下乙個新增進佇列的醜數是 ugly[pos2]*2、ugly[pos3]*3、ugly[pos3]*3 的最小值。如果新得到的醜數是由 2 乘之前某個醜數得到的,就把 pos2 指標移向下一位。
class
solution
return ugly[index-1]
;}};
在乙個字串(0<=字串長度<=10000,全部由字母組成)中找到第乙個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫).(從0開始計數)
分析:奇怪的事情發生了——在牛客的編輯器上提示 unordered_map 是未宣告的 identifier,但是仍然能通過百分百的用例。
ps:本以為這道題有什麼神奇的解法呢。
class
solution
};
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數 p 。並將 p 對 1000000007 取模的結果輸出。 即輸出p % 1000000007。題目保證輸入的陣列中沒有的相同的數字,資料範圍:
對於%50的資料,size<=10^4
對於%75的資料,size<=10^5
對於%100的資料,size<=2*10^5
分析:歸併排序的應用
class
solution
else
}while
(i<=mid)
tmp[t++
]= data[i++];
while
(j<=r)
tmp[t++
]= data[j++];
for(i=
0; i<=r-l;
++i)
data[l+i]
= tmp[i];}
void
split_merge
(vector<
int>
& data, vector<
int>
& tmp,
int l,
int r,
int& ret)
intinversepairs
(vector<
int> data)
};
刷題筆記 Binary watch
include include include using namespace std class solution m count push back i for int i 0 i num i vector a n,n 5 將陣列n的前5個元素作為向量a的初值 vector a n 1 n 4 ...
2018 4 11刷題筆記
classa newa newa newa echo a num 答案是3 因為static變數常駐記憶體 server 是乙個包含了諸如頭資訊 header 路徑 path 以及指令碼位置 script locations 等等資訊的陣列。這個陣列中的專案由 web 伺服器建立。不能保證每個伺服器...
Leetcode刷題筆記
1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...