题目链接:134. 加油站 - 力扣(LeetCode)
代码随想录题解:代码随想录 (programmercarl.com)
思路:局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置。
代码:
class Solution {
public:
int canCompleteCircuit(vector& gas, vector& cost) {
int cursum=0;
int totalsum=0;
int start=0;
for(int i=0;i
题目链接:135. 分发糖果 - 力扣(LeetCode)
代码随想录题解:代码随想录 (programmercarl.com)
思路:一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。
代码:
class Solution {
public:
int candy(vector& ratings) {
vector candycount(ratings.size(),1);
for(int i=1;iratings[i-1])
{
candycount[i]=candycount[i-1]+1;
}
}
for(int i=ratings.size()-2;i>=0;i--)
{
if(ratings[i]>ratings[i+1])
{
candycount[i]=max(candycount[i],candycount[i+1]+1);//注意
}
}
int sum=0;
for(int i=0;i
题目链接:860. 柠檬水找零 - 力扣(LeetCode)
代码随想录题解:代码随想录 (programmercarl.com)
思路:统计五块和十块的数量,遇见二十优先用十块找钱。
代码:
class Solution {
public:
bool lemonadeChange(vector& bills) {
int five=0;
int ten=0;
if(bills[0]!=5)
{
return false;
}
for(int i=0;i=1&&five>=1)
{
ten--;
five--;
continue;
}
else if(ten<1&&five>=3)
{
five-=3;
continue;
}
else
{
return false;
}
}
}
return true;
}
};
题目链接:406. 根据身高重建队列 - 力扣(LeetCode)
代码随想录题解:代码随想录 (programmercarl.com)
思路:先排身高,这样根据k为下表插入时保证身高符合规矩。
代码:
class Solution {
public:
static bool cmp(const vector& a, const vector& b) {
if (a[0] == b[0]) return a[1] < b[1];
return a[0] > b[0];
}
vector> reconstructQueue(vector>& people) {
sort (people.begin(), people.end(), cmp);
vector> que;
for (int i = 0; i < people.size(); i++) {
int position = people[i][1];
que.insert(que.begin() + position, people[i]);
}
return que;
}
};