第一題:
原題鏈接:134. 加油站 - 力扣(LeetCode)
思路:
需要三個變量,一個變量start記錄結果也就是出發的第一個加油站,一個變量curSum來記錄此時加油耗油后剩余的油量,如果發現curSum小于0的話就直接從當前加油站的下一個加油站作為第一個加油站重新計算;一個變量totalSum來記錄行駛完一圈后剩余的油量,如果小于0說明行駛不了一圈返回-1;
代碼如下:
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int start = 0;int curSum = 0;int totalSum = 0;for(int i = 0; i < gas.size(); i++){curSum += gas[i] - cost[i];totalSum += gas[i] - cost[i];if(curSum < 0){start = i + 1;curSum = 0;}}if(totalSum < 0) return -1;return start;}
};
第二題:
原題鏈接:135. 分發糖果 - 力扣(LeetCode)
思路:
先從左向右遍歷記錄右孩子比左孩子多的情況,然后再從右向左遍歷記錄左孩子比右孩子高分的情況。從右向左遍歷的時候要基于從左向右遍歷后的結果進行計算。
兩者比較完取最大值。
代碼如下:
class Solution {
public:int candy(vector<int>& ratings) {vector<int> res(ratings.size(), 1);for(int i = 1; i < ratings.size(); i++){if(ratings[i] > ratings[i - 1]){res[i] = res[i - 1] + 1;}}for(int i = ratings.size() - 2; i >= 0; i--){if(ratings[i] > ratings[i + 1]){res[i] = max(res[i], res[i + 1] + 1);}}int sum = 0;for(int i = 0; i < res.size(); i++){sum += res[i];}return sum;}
};
第三題:
原題鏈接:860. 檸檬水找零 - 力扣(LeetCode)
思路:
收到五塊直接收下,
收到十塊需要看有沒有五塊,沒有五塊直接返回false,如果有五塊減一。
收到二十塊,如果沒有五塊直接返回false,如果沒有十塊且五塊少于3張,也返回false。找零的時候先找十塊的,沒有十塊的再找五塊。
代碼如下:
class Solution {
public:bool lemonadeChange(vector<int>& bills) {unordered_map<int, int> map;for(int i = 0; i < bills.size(); i++){if(bills[i] == 5) map[5] += 1;if(bills[i] == 10){map[10] += 1;if(map[5] == 0) return false;map[5] -= 1;}if(bills[i] == 20){map[20] += 1;if(map[5] == 0) return false;if(map[10] == 0 && map[5] < 3) return false;if(map[10]){map[10]--;map[5]--;}else{map[5] -= 3;}}}return true;}
};
第四題:
原題鏈接:406. 根據身高重建隊列 - 力扣(LeetCode)
先根據身高進行從大到小的排序,如果身高相同就根據k進行從小到大排序。
然后遍歷數組,根據k的值插入到結果數組中。
按照身高排序之后,優先按身高高的people的k來插入,后序插入節點也不會影響前面已經插入的節點,最終按照k的規則完成了隊列。
代碼如下:
class Solution {
public:static bool cmp(vector<int> a, vector<int> b){if(a[0] == b[0]) return a[1] < b[1];return a[0] > b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), cmp);vector<vector<int>> res;for(int i = 0; i < people.size(); i++){int position = people[i][1];res.insert(res.begin() + position, people[i]);}return res;}
};