1005.K次取反后最大化的数组和
class Solution {
public static int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int len = nums.length;
int index = 0;
if(nums[len-1]<=0){//全是负数
if(k<=len){
for(;index < len;index++){
nums[index] = -nums[index];
}
}else{
for(;index < len;index++){
nums[index] = -nums[index];
}
int num = k-len;
if(num % 2!=0){
nums[len-1] = -nums[len-1];
}
}
}else if(nums[0]>=0){//全是正数
if(k%2!=0){
nums[0] = -nums[0];
}
}else{//有正数,有负数
for(;index<len;index++){
if(k>index && nums[index] <= 0){
nums[index] = -nums[index];
}else{
break;
}
}
if(index < k){//负数
int num = k - index;
if(num % 2!=0){
int temp = nums[index-1];
if(nums[index]>temp){
nums[index-1] = -nums[index-1];
}else{
nums[index] = -nums[index];
}
}
}
}
return Arrays.stream(nums).sum();
}
}
134. 加油站
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int num1 = Arrays.stream(gas).sum();
int num2 = Arrays.stream(cost).sum();
if (num2 > num1)
return -1;
int len = gas.length;
int left = 0;
int sum = 0;
for(int right = 0;right<len;right++){
if((sum+=gas[right] - cost[right])<0){
left = right+1;
sum = 0;
}
}
return left;
}
}
135. 分发糖果
class Solution {
public int candy(int[] ratings) {
int len = ratings.length;
int res = 0;
int[] left = new int[len];
left[0] = 1;
int right = 0;
for(int i = 1;i<len;i++){
if(ratings[i]>ratings[i-1]){
left[i] = left[i-1]+1;
}else{
left[i] = 1;
}
}
for(int i = len-1;i>=0;i--){
if(i < len-1 && ratings[i] > ratings[i+1]){
right++;
}else{
right = 1;
}
res+=Math.max(right,left[i]);
}
return res;
}
}