首页 > 其他分享 >[代码随想录]Day45-动态规划part13

[代码随想录]Day45-动态规划part13

时间:2023-09-15 09:56:09浏览次数:44  
标签:return nums int part13 随想录 lens res Day45 dp

题目:300. 最长递增子序列

思路:

dp[i]状态 取决于 dp[0] - dp[i-1]中小于dp[i]的元素中最大的值+1,即:

for j:=0; j <i; j++ {
    if nums[i] > nums[j]{
        dp[i] = max(dp[i], dp[j] + 1)
    }
}

代码:

动态规划

func lengthOfLIS(nums []int) int {
    lens := len(nums)
    dp := make([]int, lens)
    for i := 0; i < lens; i++ {
        dp[i] = 1
    }
    res := dp[0]
    for i := 1; i < lens; i++ {
        for j:=0; j <i; j++ {
            if nums[i] > nums[j]{
                dp[i] = max(dp[i], dp[j] + 1)
            }
        }
        if dp[i] > res {
            res = dp[i]
        }
    }
    return res
}
func max(a,b int)int{
    if a > b {
        return a
    }
    return b
}

参考:

代码随想录

题目:674. 最长连续递增序列

思路:

这题没啥好说的,只取决于前一项的状态;用贪心也可以

代码:

func findLengthOfLCIS(nums []int) int {
    lens := len(nums)
    if lens == 0 {
        return 0
    }
    dp := make([]int, lens)
    for i := 0; i < lens; i++ {
        dp[i] = 1
    }
    res := dp[0]
    for i := 1; i < lens; i++ {
        if nums[i] > nums[i-1] {
            dp[i] = dp[i-1] + 1
        }
        if dp[i] > res {
            res = dp[i]
        }
    }
    return res
}

参考:

代码随想录

题目:718. 最长重复子数组

思路:

如果相等了,状态取决于i-1,j-1

代码:

func findLength(nums1 []int, nums2 []int) int {
    lens1 := len(nums1)
    lens2 := len(nums2)
    dp := make([][]int, lens1 + 1)
    for i := range dp {
        dp[i] = make([]int, lens2 + 1)
    }
    res := dp[0][0]
    for i := 1; i <= lens1; i++ {
        for j := 1; j <= lens2; j++ {
            if nums1[i-1] == nums2[j-1] {
                dp[i][j] = dp[i-1][j-1] + 1
            }
            if dp[i][j] > res {
                res = dp[i][j]
            }
        }
    }
    return res
}

参考:

代码随想录

标签:return,nums,int,part13,随想录,lens,res,Day45,dp
From: https://www.cnblogs.com/wtcsky/p/17704165.html

相关文章

  • 代码随想录算法训练营第八天
    代码随想录算法训练营第八天|LeetCode28(实现strStr())LeetCode459(重复的子字符串)28:实现strStr()LeetCode28(实现strStr())classSolution{publicintstrStr(Stringhaystack,Stringneedle){//构造next数组int[]next=newint[needle.l......
  • 代码随想录算法训练营第9天| ●28. 实现 strStr() ●459.重复的子字符串 ●字符串总结
    28.找出字符串中第一个匹配项的下标mydemo--(mythought)--(falied)classSolution{public:intstrStr(stringhaystack,stringneedle){for(inti=0;i<haystack.size();i++){if(haystack[i]!=needle[0])continue;......
  • 代码随想录算法训练营第8天| ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 0
    344.反转字符串mydemo--(一次就过)--(成功)classSolution{public:voidreverseString(vector<char>&s){intlen=s.size();chartmp;inti=0;intj=len-1;while(i<j){tmp=s[i];......
  • 代码随想录算法训练营第七天
    代码随想录算法训练营第七天|LeetCode344(反转字符串)LeetCode541(反转字符串II)LeetCode剑指05(替换空格)LeetCode151(反转字符串中的单词)LeetCode剑指58(II.左旋转字符串)344:反转字符串LeetCode344(反转字符串)思路:双指针遍历直接交换元素classSolution......
  • 代码随想录算法训练营第7天| ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和
    454.两数相加Ⅱmydemo--(超时失败)classSolution{public:intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){intcount=0;for(inti=0;i<nums1.size()......
  • [代码随想录]Day43-动态规划part11
    题目:123.买卖股票的最佳时机III思路:达到dp[i][1]状态,有两个具体操作:操作一:第i天买入股票了,那么dp[i][1]=dp[i-1][0]-prices[i]操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1]=dp[i-1][1]那么dp[i][1]究竟选dp[i-1][0]-prices[i],还是dp[i-1][1]呢?......
  • 代码随想录算法训练营第六天
    代码随想录算法训练营第六天|LeetCode454(四数相加II)LeetCode383(赎金信)LeetCode15(三数之和)LeetCode18(四数之和)454:四数相加IILeetCode454(四数相加II)思路:首先定义一个map,key放a和b两数之和,value放a和b两数之和出现的次数。遍历nums1和nums2数组,统计两个数......
  • [代码随想录]Day42-动态规划part10
    题目:121.买卖股票的最佳时机思路:贪心做起来更简单;dp多此一举……状态0是有买入,状态1是代码:funcmaxProfit(prices[]int)int{lens:=len(prices)iflens==0{return0}dp:=make([][]int,lens)fori:=0;i<lens;i++{......
  • 代码随想录算法训练营第五天
    代码随想录算法训练营第五天|LeetCode242(有效的字母异位词)LeetCode349(两个数组的交集)LeetCode202(快乐数)LeetCode1(两数之和)242:有效的字母异位词LeetCode242(有效的字母异位词)classSolution{publicbooleanisAnagram(Strings,Stringt){......
  • 代码随想录:● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98
     654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个......