贪心算法
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
int ans = 0;
int n = nums.size();
int start = 0;
for (int i = 0; i < n; i++) {
if (i > 0 && nums[i] <= nums[i - 1]) {
start = i;
}
ans = max(ans, i - start + 1);
}
return ans;
}
};
动态规划
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
/* 判断 */
if(nums.size() <= 1) return nums.size();
/* 定义记录结果的变量 */
int result = 0;
/* 定义dp数组并初始化为1 */
vector<int> dp(nums.size() + 1, 1);
/* 遍历 */
for(int i = 1; i < nums.size(); i++) {
if(nums[i-1] < nums[i]) {
/* 不连续递增子序列的跟前0-i 个状态有关,连续递增的子序列只跟前一个状态有关 */
dp[i] = dp[i-1] + 1;
}
/* 记录dp数组中的最大值 */
if(result < dp[i]) result = dp[i];
}
return result;
}
};
双指针(go)
func findLengthOfLCIS(nums []int) int {
left, right := 0, 1
res := 1
for ;right < len(nums);{
if nums[right] > nums[left]{
for ;right < len(nums) && nums[right] > nums[right - 1];{
res = max(res, right - left + 1)
right++
}
}
left = right
right++
}
return res
}
func max(a int, b int) int{
if a > b{
return a
}
return b
}