当前位置: 首页 > news >正文

【算法与数据结构】343、LeetCode整数拆分

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:博主做这道题的时候一直在思考,如何找到 k k k个正整数, k k k究竟为多少合适。从数学的逻辑上来说,将 n n n均分为 k k k个数之后, k k k个数的乘积为最大(类似于相同周长下,正方形的面积大于长方形,严格的数学证明不深究了)。本题如果用动态规划的方式,令 d p [ i ] dp[i] dp[i]表示为最大的整数乘积,那么一定可以找到一个 d p [ i − j ] dp[i-j] dp[ij],使得 d p [ i − j ] ∗ j dp[i-j]*j dp[ij]j最大,并赋值给 d p [ i ] dp[i] dp[i]。而 d p [ i − j ] dp[i-j] dp[ij]又可以进行类似操作,那么可以一直追溯到 d p [ 0 ] , d p [ 1 ] , d p [ 2 ] dp[0],dp[1],dp[2] dp[0],dp[1],dp[2]。当然,本题当中 d p [ 0 ] , d p [ 1 ] dp[0],dp[1] dp[0],dp[1]没有意义, d p [ 2 ] = 1 dp[2]=1 dp[2]=1。除了 d p [ i − j ] ∗ j dp[i-j]*j dp[ij]j可以得到 d p [ i ] dp[i] dp[i]以外, ( i − j ) ∗ j (i-j)*j (ij)j也可以得到 d p [ i ] dp[i] dp[i],然后我们在每次递归的过程中比较上次的 d p [ i ] dp[i] dp[i]找到最大值。因此, d p [ i ] = m a x ( d p [ i ] , m a x ( d p [ i − j ] ∗ j , ( i − j ) ∗ j ) ) dp[i]=max(dp[i], max(dp[i-j]*j, (i-j)*j)) dp[i]=max(dp[i],max(dp[ij]j,(ij)j))。同时,因为0和1没有意义, i i i从3开始循环,到 n n n j j j只要循环到 i / 2 i/2 i/2即可。
  程序如下

class Solution {
public:int integerBreak(int n) {vector<int> dp(n + 1);dp[2] = 1;for (int i = 3; i <= n; i++) {for (int j = 1; j <= i / 2; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}}return dp[n];}
};

复杂度分析:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n ) O(n) O(n)

三、完整代码

# include <iostream>
# include <vector>
using namespace std;class Solution {
public:int integerBreak(int n) {vector<int> dp(n + 1);dp[2] = 1;for (int i = 3; i <= n; i++) {for (int j = 1; j <= i / 2; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}}return dp[n];}
};int main() {Solution s1;int n = 10;int result = s1.integerBreak(n);cout << result << endl;system("pause");return 0;
}

end

http://www.lryc.cn/news/281399.html

相关文章:

  • 中级Python面试问题
  • Lede(OpenWrt)安装和双宽带叠加
  • HTML+JS + layer.js +qrcode.min.js 实现二维码弹窗
  • leetcode 142 环形链表II
  • 电阻表示方法和电路应用
  • 论文笔记(三十九)Learning Human-to-Robot Handovers from Point Clouds
  • 浅学Linux之旅 day2 Linux系统及系统安装介绍
  • 探索未来餐饮:构建创新连锁餐饮系统的技术之旅
  • Unity组件开发--AB包打包工具
  • 毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅
  • xbox如何提升下载速度?
  • day13 滑动窗口最大值 前K个高频元素
  • Unity——VContainer的依赖注入
  • 【面试突击】Spring 面试实战
  • 【Linux】Ubuntu 22.04 上安装最新版 Nextcloud Hub 7 (28.0.1)
  • PHP项目如何自动化测试
  • WEB 3D技术 three.js 3D贺卡(1) 搭建基本项目环境
  • 短视频IP运营流程架构SOP模板PPT
  • python爬虫之线程与多进程知识点记录
  • 基于Java (spring-boot)的停车场管理系统
  • 微软Office 2019 批量授权版
  • ChatGLM2-6B 大语言模型本地搭建
  • WindowsServer安装mysql最新版
  • gin切片表单验证
  • openssl3.2 - 官方demo学习 - certs
  • Datawhale 大模型基础理论 Day1 引言
  • HarmonyOS应用开发学习笔记 UIAbility组件与UI的数据同步 EventHub、globalThis
  • leetcode每日一题44
  • idea写sql语句快捷键提醒,mapper注解开发,mybatis
  • 002 Golang-channel-practice