代碼隨想錄算法訓練營第四十天|343. 整數拆分、96. 不同的二叉搜索樹。

343. 整數拆分

題目鏈接:整數拆分

題目描述
給定一個正整數 n ,將其拆分為 k 個 正整數 的和( k >= 2 ),并使這些整數的乘積最大化。
返回 你可以獲得的最大乘積 。

解題思路
1、確定dp數組(dp table)以及下標的含義
設置dp[i] 為i的拆分最大值
2、確定遞推公式
dp[i] = max(dp[i], max((i - j) * j, dp[i - j] *j));
前一部分為將i分為i-j和j兩部分,后一部分是將i分為j和更多的分塊的i-j。
3、dp數組如何初始化
按照定義可以知道只有dp[2]有意義為1
4、確定遍歷順序
dp[i] 是依靠 dp[i - j]的狀態,所以遍歷i一定是從前向后遍歷,先有dp[i - j]再有dp[i]。
5、舉例推導dp數組
在這里插入圖片描述

代碼實現

class Solution {public int integerBreak(int n) {int[] dp = new int[n+1];dp[2] = 1;for(int i = 3;i<=n;i++){for(int j = 1; j<=i-j;j++){dp[i] = Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]));System.out.println(dp[i]);}}return dp[n];}
}

96. 不同的二叉搜索樹

題目鏈接:不同的二叉搜索樹

題目描述
給你一個整數 n ,求恰由 n 個節點組成且節點值從 1 到 n 互不相同的 二叉搜索樹 有多少種?返回滿足題意的二叉搜索樹的種數。

解題思路
本題主要的難點在于遞推過程的理解,借用卡哥的解釋
在這里插入圖片描述
在這里插入圖片描述

當1為頭結點的時候,其右子樹有兩個節點,看這兩個節點的布局,是不是和 n 為2的時候兩棵樹的布局是一樣的啊!
(可能有同學問了,這布局不一樣啊,節點數值都不一樣。別忘了我們就是求不同樹的數量,并不用把搜索樹都列出來,所以不用關心其具體數值的差異)
當3為頭結點的時候,其左子樹有兩個節點,看這兩個節點的布局,是不是和n為2的時候兩棵樹的布局也是一樣的啊!
當2為頭結點的時候,其左右子樹都只有一個節點,布局是不是和n為1的時候只有一棵樹的布局也是一樣的啊!
發現到這里,其實我們就找到了重疊子問題了,其實也就是發現可以通過dp[1] 和 dp[2] 來推導出來dp[3]的某種方式。
思考到這里,這道題目就有眉目了。
dp[3],就是 元素1為頭結點搜索樹的數量 + 元素2為頭結點搜索樹的數量 + 元素3為頭結點搜索樹的數量
元素1為頭結點搜索樹的數量 = 右子樹有2個元素的搜索樹數量 * 左子樹有0個元素的搜索樹數量
元素2為頭結點搜索樹的數量 = 右子樹有1個元素的搜索樹數量 * 左子樹有1個元素的搜索樹數量
元素3為頭結點搜索樹的數量 = 右子樹有0個元素的搜索樹數量 * 左子樹有2個元素的搜索樹數量
有2個元素的搜索樹數量就是dp[2]。
有1個元素的搜索樹數量就是dp[1]。
有0個元素的搜索樹數量就是dp[0]。
所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]
代碼實現

class Solution {public int numTrees(int n) {//初始化 dp 數組int[] dp = new int[n + 1];//初始化0個節點和1個節點的情況dp[0] = 1;dp[1] = 1;for (int i = 2; i <= n; i++) {for (int j = 1; j <= i; j++) {//對于第i個節點,需要考慮1作為根節點直到i作為根節點的情況,所以需要累加//一共i個節點,對于根節點j時,左子樹的節點個數為j-1,右子樹的節點個數為i-jdp[i] += dp[j - 1] * dp[i - j];}}return dp[n];}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

flink內存管理,設置思路,oom問題,一文全

flink內存管理 1 內存分配1.1 JVM 進程總內存&#xff08;Total Process Memory&#xff09;1.2 Flink 總內存&#xff08;Total Flink Memory&#xff09;1.3 JVM 堆外內存&#xff08;JVM Off-Heap Memory&#xff09;1.4 JVM 堆內存&#xff08;JVM Heap Memory&#xff09;…

運維的利器–監控–zabbix–第二步:建設–部署zabbix agent

文章目錄 監控客戶端部署及添加主機一、在 zabbix-server 安裝客戶端二、在本機和其他linux主機安裝zabbix agent客戶端1、安裝2、配置3、啟動并開機自啟4、添加主機創建主機組創建主機等一會或重啟zabbix-server查看配置是否成功 三、在其他windows上安裝zabbix agent客戶端下…

主流的開發語言和開發環境介紹

個人淺見&#xff0c;不喜勿噴&#xff0c;謝謝 軟件開發是一個涉及多個方面的復雜過程&#xff0c;其中包括選擇合適的編程語言和開發環境。編程語言是軟件開發的核心&#xff0c;它定義了程序員用來編寫指令的語法和規則。而開發環境則提供了編寫、測試和調試代碼的工具和平臺…

Microsoft的PromptBench可以做啥?

目錄 PromptBench簡介 PromptBench的快速模型性能評估 PromptBench數據集介紹 PromptBench模型介紹 PromptBench模型加載遇到的問題 第一次在M1 Mac上加載模型 vicuna和llama系列模型 PromptBench各個模型加載情況總結 PromptBench的Prompt快速工程 chain of thought…

WebService學習,wsdl文件詳解

目錄 第一章、起因1.1&#xff09;學習原因1.2&#xff09;提問的過程&#xff08;逐步提出問題&#xff09;1、&#xff1f;wsdl鏈接的含義&#xff0c;有什么作用&#xff1f;2、什么是wsdl文檔&#xff1f;3、如何閱讀wsdl文件&#xff1f;4、wsdl文件有什么作用&#xff1f…

基于springboot+vue的智慧社區系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

每周編輯精選|MathPile 數學推理語料庫開源、協和眼科牽頭用 AI 助力 13 種眼底疾病檢測

近日&#xff0c;上海交通大學生成式人工智能研究實驗室 (GAIR)&#xff0c;開源了專為數學領域量身定制的高質量且多樣化的預訓練數據集 MathPile&#xff0c;及其可商用版本 MathPile-Commercial&#xff0c;現在在 hyper.ai 官網可以下載啦&#xff01;還有更多如 MathVista…

(十四)【Jmeter】線程(Threads(Users))之開放模型線程組(Open Model Thread Group)

簡述 操作路徑如下: 開放模型線程組(Open Model Thread Group) 是 JMeter 5.5 版本中引入的一個新特性,它允許用戶創建具有可變負載的負載配置文件。相較于傳統的線程組,開放模型線程組提供了更多的靈活性和動態調整的能力。 優點: 靈活性:允許測試人員根據測試需求動…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取掃描的pdf和插入的圖片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文檔\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Verilog刷題筆記33

題目&#xff1a; You are given a four-bit input vector in[3:0]. We want to know some relationships between each bit and its neighbour: out_both: Each bit of this output vector should indicate whether both the corresponding input bit and its neighbour to t…

Kafka3.x進階

來源&#xff1a;B站 目錄 Kafka生產者生產經驗——生產者如何提高吞吐量生產經驗——數據可靠性生產經驗——數據去重數據傳遞語義冪等性生產者事務 生產經驗——數據有序生產經驗——數據亂序 Kafka BrokerKafka Broker 工作流程Zookeeper 存儲的 Kafka 信息Kafka Broker 總…

戲曲文化苑|戲曲文化苑小程序|基于微信小程序的戲曲文化苑系統設計與實現(源碼+數據庫+文檔)

戲曲文化苑小程序目錄 目錄 基于微信小程序的戲曲文化苑系統設計與實現 一、前言 二、系統功能設計 三、系統實現 1、微信小程序前臺 2、管理員后臺 &#xff08;1&#xff09;戲曲管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;公告類型管理…

PostgreSQL 的實體化視圖介紹

PostgreSQL 實體化視圖提供一個強大的機制&#xff0c;通過預先計算并將查詢結果集存儲為物理表來提高查詢性能。本教程將使用 DVD Rental Database 數據庫作為演示例子&#xff0c;指導你在 PostgreSQL中創建實體化視圖。 了解實體化視圖 實體化視圖是查詢結果集的快照&…

docker安裝PostGIS擴展

去docker倉庫查找你想要安裝的鏡像版本&#xff0c;并pull下來 我下載的版本&#xff1a; [rootlocalhost ~]# docker pull postgis/postgis:12-3.2運行容器 [rootlocalhost ~]# docker run --name postgis --privilegedtrue --restartalways -e POSTGRES_USER12345678 -e P…

【高德地圖】Android高德地圖初始化定位并顯示小藍點

&#x1f4d6;第3章 初始化定位并顯示小藍點 ?第1步&#xff1a;配置AndroidManifest.xml?第2步&#xff1a;設置定位藍點?第3步&#xff1a;初始化定位?完整代碼 ?第1步&#xff1a;配置AndroidManifest.xml 在application標簽下聲明Service組件 <service android:n…

FPS游戲之漫談截幀技術

什么是截幀技術 簡而言之就是截取當前屏幕的內容&#xff0c;然后一般是以圖片的形式存入本地 為什么需要這個技術 因為有需求 比如我們需要把我牛逼的戰績炫耀下&#xff0c;是不是以圖文的形式分享到朋友圈是不是最直觀&#xff1f;&#xff1f;&#xff1f; 在Unity引擎中…

Aigtek高壓放大器是什么東西做的

在許多電子應用中&#xff0c;需要將低電壓信號放大到較高電壓以滿足特定的需求。為了實現這個目標&#xff0c;高壓放大器被廣泛采用。高壓放大器是一種專用電子設備&#xff0c;使用特定的電路和器件來增益輸入信號的電壓。它通常由以下幾個主要組成部分構成。 電源供應 高壓…

Linux編譯器---gcc/g++使用詳解

目錄 前言 gcc/g介紹 gcc/g的編譯指令&#xff08;以gcc為例&#xff09; ?編輯 gcc選項 預處理(進行宏替換) 編譯&#xff08;生成匯編&#xff09; 匯編&#xff08;生成機器可識別代碼&#xff09; 鏈接&#xff08;生成可執行文件或庫文件&#xff09; 函數庫 概念 …

網絡金融治理模式下第三方支付風險與應對路徑

隨著經濟社會的高速發展&#xff0c;消費模式日益多樣化&#xff0c;其中&#xff0c;第三方支付作為一種便捷的消費支付模式&#xff0c;在順應時代發展潮流中應運而生。這種支付模式通過中國人民銀行批準&#xff0c;持有《支付業務許可證》&#xff0c;并與銀行簽約&#xf…

訓練yolov8+SAM的過程記錄

1-首先將拿到的數據集進行重新命名(dataset1:是經過校色之后裁剪的圖片;dataset2:原圖) 圖片文件從1.jpg開始命名的代碼: folder_path = rC:\Users\23608\Desktop\Luli_work\data\fanStudent\tongueseg\Fan\Fan\.jpg new_folder = rC:\Users\23608\Desktop\Luli_work\da…