本题要求对数组中进行k次取反求数组和的最大值,因此遍历数组时记录数组中最小的元素下标并对其取反是求数组和最大值的关键一步,在修改完k次元素值后算出来的数组和即为所求。
具体代码如下:
class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
int minnum=101;
int sum=0;
for(int i=0;i<nums.size();i++)
{
sum+=nums[i];
}
for(int i=k;i>0;i--)
{
int j;
for(int a=0;a<nums.size();a++)
{
if(nums[a]<minnum)
{
minnum=nums[a];
j=a;
}
}
nums[j]=-nums[j];
sum+=2*nums[j];
minnum=101;
}
return sum;
}
};
本题要通过求解剩余油量能否满足路程中的所需油量判断能否通过所给路径一圈。因此,可以求出剩余油量和所需油量的差值,如果大于0说明可以继续走下去,如果小于0则说明要从下一个加油站作为起始点开始判断,如果差值总和小于0说明无论从哪个加油站出发都无法到达。
具体代码如下:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int cursum=0;
int totalsum=0;
int start=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;
}
};
本题要求按照每个孩子的评分高低分发糖果,可以从左向右遍历先确保右边孩子与左边孩子相比糖果数量的正确性,再从右向左遍历确保左边孩子与右边孩子相比糖果数量的正确性,本次遍历要对两次遍历的结果取最大值,最后将糖果数组求得数组和返回即可。
具体代码如下:
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int>candy(ratings.size(),1);
for(int i=1;i<ratings.size();i++)
{
if(ratings[i]>ratings[i-1])
{
candy[i]=candy[i-1]+1;
}
}
for(int j=ratings.size()-2;j>=0;j--)
{
if(ratings[j]>ratings[j+1])
{
candy[j]=max(candy[j+1]+1,candy[j]);
}
}
int sum=0;
for(int i=0;i<candy.size();i++)
{
sum+=candy[i];
}
return sum;
}
};
本文解析了LeetCode中的三个编程题:1005题的数组取反求和、134题的路径判断和135题的糖果分配。通过代码示例展示了如何解决这些问题,涉及数组操作、逻辑判断和优化算法。
1325

被折叠的 条评论
为什么被折叠?



