提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、力扣1005.K次取反后最大化的数组和
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int count = 0;
int i ;
for( i = 0; i < k && i < nums.length; i ++){
if(nums[i] < 0){
nums[i] = -nums[i];
count += nums[i];
}else{
break;
}
}
if(((k-i) % 2) == 1){
if(i == nums.length){
count -= nums[i-1];
nums[i-1] = -nums[i-1];
i --;
}else if(i ==0){
nums[i] = -nums[i];
}else if(nums[i] < nums[i-1]){
nums[i] = -nums[i];
}else{
count -= nums[i-1];
nums[i-1] = -nums[i-1];
i--;
}
}
while(i < nums.length){
count += nums[i];
i ++;
}
return count;
}
}
二、力扣134. 加油站
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int curSum = 0;
int totalSum = 0;
int index = 0;
for(int i = 0; i < gas.length; i ++){
curSum += gas[i] - cost[i];
totalSum += gas[i] - cost[i];
if(curSum < 0){
curSum = 0;
index = i + 1;
}
}
if(totalSum < 0){
return -1;
}
return index;
}
}
三、力扣135. 分发糖果
class Solution {
public int candy(int[] ratings) {
int len = ratings.length;
int[] candyVec = new int[len];
candyVec[0] = 1;
for(int i = 1; i < len; i ++){
candyVec[i] = ratings[i] > ratings[i-1] ? candyVec[i-1] + 1 : 1;
}
for(int i = len-2; i >= 0; i --){
if(ratings[i] > ratings[i+1]){
candyVec[i] = Math.max(candyVec[i] , candyVec[i+1] + 1);
}
}
int count = 0;
for(int a : candyVec){
count += a;
}
return count;
}
}
本文介绍了三道LeetCode上的编程题目,分别是关于在K次取反操作后最大化数组和的问题、找出能完成环形旅行的加油站起始位置以及公平地分发糖果给学生。解决方案涉及数组排序、循环遍历及条件判断等算法思想。
883

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



