- 最大子序和
class Solution {
public int maxSubArray(int[] nums) {
int i;
int sum=0,res=Integer.MIN_VALUE;
for(i=0;i<nums.length;i++){
if(sum>0)
sum+=nums[i];
else
sum=nums[i];
res=Math.max(sum,res);
}
return res;
}
}
面试题 17.16. 按摩师
class Solution {
public int massage(int[] nums) {
int n=nums.length;
if(n==0){
return 0;
}
else if(n==1){
return nums[0];
}
else if(n==2){
return Math.max(nums[0],nums[1]);
}
else if(n==3){
return Math.max(nums[1],nums[0]+nums[2]);
}
else{
int pre[]=new int[n+1];
pre[1]=nums[0];
pre[2]=Math.max(nums[0],nums[1]);
pre[3]=Math.max(nums[1],nums[0]+nums[2]);
for(int i=4;i<=n;i++){
pre[i]=Math.max(nums[i-1]+pre[i-2],pre[i-1]);
}
return pre[n];
}
}
}
- 除数博弈
class Solution {
public boolean divisorGame(int n) {
if(n==0||n==1){
return false;
}else if(n==2){
return true;
}else if(n==3){
return false;
}else{
boolean pre[]=new boolean[n+1];
pre[1]=false;
pre[2]=true;
pre[3]=false;
for(int i=4;i<=n;i++){
boolean flag=false;
for(int j=1;j<i;++j){
if(i%j==0&&!pre[i-j]){
flag=true;
break;
}
}
pre[i]=flag;
}
return pre[n];
}
}
}
- 买卖股票的最佳时机
class Solution {
public int maxProfit(int[] prices) {
if(prices.length<=1){
return 0;
}
int min=prices[0],max=0;
for(int i=1;i<prices.length;i++){
max=Math.max(prices[i]-min,max);
min=Math.min(min,prices[i]);
}
return max;
}
}