题目1:【二刷完成】
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
// 将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
nums = IntStream.of(nums)
.boxed()
.sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1))
.mapToInt(Integer::intValue).toArray();
int result = 0;
for (int i=0;i<nums.length;i++){
if (nums[i]<0 && k>0){
nums[i] = -nums[i];
k--;
}
result += nums[i];
}
if (k%2==1){
result -= nums[nums.length-1];
nums[nums.length-1] = -nums[nums.length-1];
result += nums[nums.length-1];
}
return result;
}
}
class Solution {
public int largestSumAfterKNegations(int[] nums, int k) {
Arrays.sort(nums);
int result = 0;
for (int i=0;i<nums.length;i++){
if (nums[i]<0 && k>0){
nums[i] = -nums[i];
k--;
}
}
Arrays.sort(nums);
if (k>0 && k%2==1){
nums[0] = -nums[0];
}
for (int i=0;i<nums.length;i++){
result += nums[i];
}
return result;
}
}
题目2:【二刷完成】
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int[] nums = new int[gas.length];
int curSum = 0;
int allSum = 0;
int start = 0;
for (int i=0;i<gas.length;i++){
curSum += (gas[i] - cost[i]);
allSum += (gas[i] - cost[i]);
if (curSum < 0){
start = i+1;
curSum = 0;
}
}
if (allSum<0){
return -1;
}
return start;
}
}
题目3:【二刷完成】
lass Solution {
public int candy(int[] ratings) {
int sum=0;
int[] count = new int[ratings.length];
for(int i=0;i<count.length;i++){
count[i] = 1;
}
for (int i=0;i<ratings.length-1;i++){
//判断右孩子比左孩子得分高的情况
if (ratings[i]<ratings[i+1]){
count[i+1] = count[i] + 1;
}
}
for (int i=ratings.length-1;i>0;i--){
//判断左孩子比右孩子高的情况
if (ratings[i-1]>ratings[i]){
count[i-1] = Math.max(count[i-1],count[i] + 1);
}
}
for (int i=0;i<count.length;i++){
sum += count[i];
}
return sum;
}
}