#include<iostream>
#include<vector>
using namespace std;
/*
问题描述:
给定一个整数数组nums,找到一个具有最大和的子序列,返回其最大和。
*/
int maxsubarray(vector<int>nums){
int reslut=-10000;
int count=0;
for(int i=0;i<nums.size();i++){
count=count+nums[i];
if (count>reslut){
reslut=count;
}
if(count<=0){
count=0;
}
}
return reslut;
}
int main(){
vector<int>nums;
nums.push_back(-2);
nums.push_back(1);
nums.push_back(-3);
nums.push_back(4);
nums.push_back(-1);
nums.push_back(2);
nums.push_back(1);
nums.push_back(-5);
nums.push_back(4);
int max_sum=0;
max_sum=maxsubarray(nums);
cout<<"最大子序和"<<max_sum<<endl;
}
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
/*
问题描述:
给定一个非负正数数组,最初位于数组的第一个位置。数组中的每个元素代表在该位置可以跳远的
*/
using namespace std;
int jump(vector<int>& nums){
if(nums.size()==1){
return 0;
}
int curDistance=0;
int nextDistance=0;
int ans=0;
for(int i=0;i<nums.size();i++){
nextDistance=max(nums[i]+i,nextDistance);
if(i==curDistance){
if(curDistance!=nums.size()-1){
ans++;
curDistance=nextDistance;
if(nextDistance>=nums.size()-1){
break;
}
}
else{
break;
}
}
}
return ans;
}
int main(){
vector<int>nums;
nums.push_back(2);
nums.push_back(3);
nums.push_back(1);
nums.push_back(1);
nums.push_back(4);
int min_jump=0;
min_jump=jump(nums);
cout<<"最小跳远次数min_jump:"<<min_jump<<endl;
}