买卖股票的最佳时机
public class day30_买卖股票的最佳时期二 {
public static void main(String[] args) {
}
public int maxProfit(int[] prices) {
int res=0;
//就是一次遍历两个
if (prices.length<=1) {
return 0;
}
for(int i=1;i<prices.length;i++){
if (prices[i]-prices[i-1]>0) {
res+=prices[i]-prices[i-1];
}
}
return res;
}
}
这题的代码非常简单主要是想法,就是取相邻两个的差,总体就是压到降价就不搞,遇到涨价就加进去。
跳跃游戏
public class day30_55_跳跃游戏 {
public static void main(String[] args) {
}
public boolean canJump(int[] nums) {
//算当前的能量
int myeng=0;
int boxeng;
if (nums[0]==0&&nums.length>1) {
return false;
}
for(int i=0;i<nums.length;i++){
boxeng=nums[i];
if (boxeng>myeng) {
myeng=boxeng;
}
if (myeng==0&&i!=0&&i!=nums.length-1) {
return false;
}
myeng-=1;
}
return true;
}
}
注意这一块他要放在更新mybox之后,自己一开始放在前面是错误的,然后就是if中i!=len-1如果为0,但是也在最后一个格子了,也是符合道理的
跳跃游戏二·
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]);
//说明当前一步,再跳一步就到达了末尾
if (maxDistance>=nums.length-1){
count++;
break;
}
//走到当前覆盖的最大区域时,更新下一步可达的最大区域
if (i==curDistance){
curDistance = maxDistance;
count++;
}
}
return count;
}
}
这题就是要判断当前的下一步的下一步能走到哪里,贪心的一直走下去就可以,
005.K次取反后最大化的数组和
import java.lang.reflect.Array;
import java.util.Arrays;
public class day30_1005_k次取反后的最大化的数组和 {
public static void main(String[] args) {
}
public int largestSumAfterKNegations(int[] nums, int k) {
int res=0;
//先排序然后从第一个开始取负数就行
for(int i=0;i<k;i++){
Arrays.sort(nums);
nums[0]=-nums[0];
}
for(int j=0;j<nums.length;j++){
res+=nums[j];
}
return res;
}
}
这个回事每次sort然后把最小的那个数对他去翻,然后接着sort,然后最后求和就可以了