
題目解析: 給定一個陣列代表每天的溫度,要求找出每一天需要等幾天後才會出現更高的溫度,如果未來都沒有更高的溫度就補0
解題思路: 設一個全為0的陣列ans和一個堆疊v用來裝天數的索引。丟進迴圈跑每天的溫度,如果今天的溫度比堆疊最上面那天的溫度還高,就把最上面的天數拿出來,將兩者的天數差存進ans,重複這動作直到堆疊為空或遇到更高溫為止。最後把今天的天數索引塞進堆疊,跑完回傳ans
class Solution {
public:
vector dailyTemperatures(vector& temperatures) {
int n = temperatures.size();
vector ans(n, 0);
stack v;
for (int i=0; i temperatures[v.top()]) {
int j = v.top();
v.pop();
ans[j] = i - j;
}
v.push(i);
}
return ans;
}
};

題目解析: 給定一個陣列,裡面除了某個數字只出現過一次之外,其他所有數字都剛好出現兩次,要把那個落單的數字找出來
解題思路: 設一個集合v。丟進迴圈把陣列裡的數字一個一個抓出來看,如果這個數字已經在集合裡面了(代表第二次出現),就把它從集合裡刪除;如果沒出現過就加進去。這樣迴圈跑完後,集合裡面就只會剩下那個落單的數字,最後直接回傳集合裡的第一個元素
class Solution {
public:
int singleNumber(vector& nums) {
set v;
for(auto it : nums){
if(v.count(it)){
v.erase(it);
}else{
v.insert(it);
}
}
return *v.begin();
}
};

題目解析: 給定一個整數n,回傳一個陣列,裡面依序紀錄從0到n的每一個數字,換算成二進位之後總共有幾個1
解題思路: 設一個空陣列v,丟進迴圈從0一路跑到n。每次先把計算1數量的變數ans歸零,並用變數q裝當前數字。接著跑內層迴圈,從可能的最大2的次方數開始往下找,如果q大於等於該2的次方數,就把q扣掉該數值,同時把ans加1。等q一路扣到0之後,把ans塞進陣列v裡面,最後回傳v
class Solution {
public:
vector countBits(int n) {
vector v;
for(int i=0; i<=n; i++){
int ans = 0, q = i;
for(int j=pow(i, 0.5)+1; j>=0 && q != 0; j--){
if(q >= pow(2, j)){
ans++;
q -= pow(2, j);
}
}
v.push_back(ans);
}
return v;
}
};