45. 跳跃游戏 II
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
假设你总是可以到达数组的最后一个位置。
class Solution {
public int jump(int[] nums) {
if(nums==null ||nums.length==0 || nums.length==1){
return 0;
}
int count=0;//记录次数
int curDistance=0;//记录当前的覆盖的最大区域
int maxDistance=0;//记录最大的覆盖区域
for (int i = 0; i <nums.length ; i++) {
//计算在当前下标能达到的最大范围
maxDistance=Math.max(maxDistance,i+nums[i]);
//说明能直接达到最后 count++ 结束跳跃
if(maxDistance>=nums.length-1){
count++;
break;
}
//当不能达到时 走到当前覆盖的最大区域 继续向后尝试
if(curDistance==i){
curDistance=maxDistance;
count++;
}
}
return count;
}
}
1005. K 次取反后最大化的数组和
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
以这种方式修改数组后,返回数组可能的最大和。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public static int largestSumAfterKNegations(int[] nums, int k) {
if (nums.length == 1) {
if (k % 2 == 0) return nums[0];
if (k % 2 == 1) return nums[1];
}
Arrays.sort(nums);
int sum = 0;
int index = 0;
for (int i = 0; i < k; i++) {
if (i < nums.length - 1 && nums[index] < 0) {
nums[index] = -nums[index];
if (nums[index] >= Math.abs(nums[index + 1])) {
index++;
}
continue;
}
nums[index] = -nums[index];
}
for (int num : nums) {
sum += num;
}
return sum;
}