class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int i = 0;
while(k > 0 && i < nums.length && nums[i] < 0){
nums[i] = -nums[i];
k--;
i++;
}
if(k == 0){
return Arrays.stream(nums).sum();
}
else{
Arrays.sort(nums);
if(k % 2 != 0)nums[0] = -nums[0];
}
return Arrays.stream(nums).sum();
}
}
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int totalGas = 0;
int totalCost = 0;
int start = 0;
int remain = 0;
for(int i = 0; i < gas.length; i++){
totalGas += gas[i];
totalCost += cost[i];
remain += gas[i] - cost[i];
if(remain < 0){
start = i + 1;
remain = 0;
}
}
if(totalGas < totalCost){
return -1;
}
else return start;
}
}
class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] candies = new int[n];
Arrays.fill(candies, 1);
for(int i = 1; i < n; i++){
if(ratings[i] > ratings[i - 1]){
candies[i] = candies[i - 1] + 1;
}
}
for(int i = n - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1]){
candies[i] = Math.max(candies[i], candies[i + 1] + 1);
}
}
return Arrays.stream(candies).sum();
}
}