classSolution{publicintmaxSubArray(int[] nums){int max = nums[0];int sum = nums[0];for(int i =1; i < nums.length;++i){if(sum >0){
sum += nums[i];}else{
sum = nums[i];}if(sum > max)
max = sum;}return max;}}
classSolution{publicintwaysToStep(int n){int first =1;int second =2;int third =4;if(n ==1)return first;elseif(n ==2)return second;elseif(n ==3)return third;else{for(int i =4; i <=n;++i){int temp = third;
third =(int)((first + second +(long)third)%1000000007);
first = second;
second = temp;}}return third;}}
d
p
[
i
]
dp[i]
dp[i] 表示以第
i
i
i个元素为结尾的递增子序列的最大长度。
状态转移方程:对于在第
j
j
j个元素(
j
<
i
j < i
j<i),如果存在
n
u
m
s
[
j
]
<
n
u
m
s
[
i
]
nums[j] < nums[i]
nums[j]<nums[i],则
d
p
[
i
]
dp[i]
dp[i] 至少为
d
p
[
j
]
+
1
dp[j] + 1
dp[j]+1,至少的意思是说应该考虑所有的
j
j
j元素,并从中区最大的
d
p
[
j
]
dp[j]
dp[j]。
classSolution{publicintlengthOfLIS(int[] nums){int[] lens =newint[nums.length];int max = lens[0]=1;for(int i =1; i < nums.length;++i){int t_len =0;for(int j =0; j < i;++j){if(nums[j]< nums[i]&& lens[j]> t_len){
t_len = lens[j];}}
lens[i]= t_len +1;if(max < lens[i]) max = lens[i];}return max;}}
剑指 Offer 42. 连续子数组的最大和class Solution { public int maxSubArray(int[] nums) { int max = nums[0]; int sum = nums[0]; for (int i = 1; i < nums.length; ++i) { if (sum > 0) { sum += nums[i];