首页 > 编程语言 >代码随想录算法训练营第四十天 | 96.不同的二叉搜索树,343. 整数拆分

代码随想录算法训练营第四十天 | 96.不同的二叉搜索树,343. 整数拆分

时间:2024-03-08 15:22:05浏览次数:19  
标签:示例 int 随想录 二叉 搜索 maxRes 343 dp 96

343. 整数拆分

  已解答 中等  

相关标签

相关企业  

提示

 

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

 

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

 

提示:

  • 2 <= n <= 58

 


func integerBreak(n int) int { //dp[i] 的含义 该正整数的最大乘积 // 递推公式 dp[5] = max(1,dp[4],2*dp[3],3*dp[2], 1*4,2*3) // 初始化 dp[2] = 1, dp[3] = max(1*2,1*dp[2]) dp[4] = max(1*3,2*2,1*dp[3],2*dp[2]) // 遍历,从3遍历到n // 输出 var dp []int dp = make([]int, n+1) dp[2] = 1 for i := 3; i < n+1; i++ { var maxRes int for j := 1; j <= i/2; j++ { if j*(i-j) > maxRes { maxRes = j * (i - j) } cur := j * dp[i-j] if cur > maxRes { maxRes = cur } } dp[i] = maxRes } return dp[n] }

96. 不同的二叉搜索树

  已解答 中等  

相关标签

相关企业  

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

 

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

 

提示:

  • 1 <= n <= 19

func numTrees(n int) int { //dp[i] , 满足题意的二叉搜索树种数 //递推公式, dp[4] = dp[3]*dp[0] + dp[2]*dp[1] + dp[1]*dp[2] + dp[0]*dp[3] //初始化 dp[0] = 1 dp[1] = 1 // dp[0->n-1] * dp[n-1->0] //输出dp结果 dp := make([]int, n+1) dp[0], dp[1] = 1, 1 fori := 2; i < n+1; i++ { varansint forj := 0; j < i; j++ { ans += dp[j] * dp[i-j-1] } dp[i] = ans } return dp[n] }

标签:示例,int,随想录,二叉,搜索,maxRes,343,dp,96
From: https://www.cnblogs.com/suxinmian/p/18061067

相关文章

  • day58 动态规划part15 代码随想录算法训练营 392. 判断子序列
    题目:392.判断子序列我的感悟:理解难点:听课笔记:我的代码:通过截图:代码易错点:老师代码:扩展写法-双指针:classSolution:defisSubsequence(self,s:str,t:str)->bool:#初始化两个指针,分别指向s和t的第一个字符i,j=0,0#......
  • day57 动态规划part14 代码随想录算法训练营 53. 最大子数组和
    题目:53.最大子数组和我的感悟:理解难点:递推公式想错了。听课笔记:我的错误的代码:通过截图:代码易错点:老师代码:扩展写法:资料:......
  • day57 动态规划part14 代码随想录算法训练营 1035. 不相交的线
    题目:1035.不相交的线我的感悟:换汤不换药理解难点:换了个壳子听课笔记:多理解这个题意我的代码:classSolution:defmaxUncrossedLines(self,nums1:List[int],nums2:List[int])->int:#因为强调顺序,所以跟1143最长公共子序列是一样的dp......
  • 代码随想录算法训练营第三十九天|● 62.不同路径 ● 63. 不同路径 II
    不同路径 题目链接:62.不同路径-力扣(LeetCode)思路:由于不能回退,因此每一格只能来自上一格或左边一格,因此dp数组中每个格子只要将这两个格子的值相加即可。classSolution{public:intuniquePaths(intm,intn){vector<vector<int>>dp(m,vector<int>(n));......
  • day57 动态规划part14 代码随想录算法训练营 1143. 最长公共子序列
    题目:1143.最长公共子序列我的感悟:你永远不知道自己有多厉害!加油!理解难点:递推公式如何想,通过图,来记忆。听课笔记:我的代码:classSolution:deflongestCommonSubsequence(self,text1:str,text2:str)->int:#假设text1为内层,text2为外层n......
  • 代码随想录算法训练营第三十七天 | 62.不同路径 ,63. 不同路径 II
    63.不同路径II 已解答中等 相关标签相关企业 提示 一个机器人位于一个 mxn 网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑......
  • AT_abc343_f [ABC343F] Second Largest Query 题解
    分析考虑乱搞。对于求次大值,用线段树维护就行了。记录下每个区间的最大、次大值。则两个子区间的父区间的最大值就是这四个最大的,次大值就是这四个次大的。复杂度\(O(\logn)\)。求次大值的出现次数,乱搞就行了。因为带修,带修莫队或者分块有些麻烦。其实用线段树就行。在维护区......
  • CF1896D 题解
    Solution令\(l,r\)能使\(\sum\limits_{i=l}^{r}a_i=S\)。考虑先令\(l=1\),那么如果存在\(\sum\limits_{i=1}^{r}=S\),即输出YES。如果没有,则一定有\(\sum\limits_{i=1}^{r}=S-1\),且\(a_{r+1}=2\)。考虑对\(l,r\)进行调整:将\(l\)向左移,\(r\)向右移。可以发现当\(......
  • 代码随想录算法训练营第二天| 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋
    977.有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/description/publicstaticint[]sortedSquares(int[]nums){intleft=0;intright=nums.length-1;int[]result=newint[nums.length];intwrite=......
  • AtCoder Beginner Contest 343
    A-WrongAnswer(abc343A)题目大意给定\(a,b\),输出\(c\),使得\(a+b\neqc\)解题思路从\(0\)开始枚举\(c\)的取值即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.......