【算法訓練記錄——Day39】

Day39——動態規劃Ⅱ

  • 1.leetcode_62不同路徑
  • 2.leetcode_63不同路徑Ⅱ
  • 3.leetcode_343整數拆分
  • 4.leetcode_96不同的二叉樹搜索

1.leetcode_62不同路徑

在這里插入圖片描述
思路:經典的動態規劃問題:

  1. dp[i][j]表示到達(i,j)位置時的不同路徑數
  2. 因為只能向下或向右走,因此當前位置只能從上面或左邊過來,dp[i][j] = dp[i-1][j] + dp[i][j-1]
  3. 初始化:最左邊只能從頭頂過來,最上面只能從右側過來。即:dp[i][0] = 1; dp[0][j] = 1;
  4. 順序是從左上角到右下角
  5. dp[i][j] = dp[i-1][j] + dp[i][j-1](i != 0 && j != 0)
	int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0));for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) {if(i == 0 || j == 0)dp[i][j] = 1;else dp[i][j] = dp[i-1][j] + dp[i][j-1];}return dp[m-1][n-1];}

方法二:滾動數組,沒太理解,二刷再看

	int uniquePaths(int m, int n) {vector<int> dp(n);for (int i = 0; i < n; i++) dp[i] = 1;for (int j = 1; j < m; j++) {for (int i = 1; i < n; i++) {dp[i] += dp[i - 1];}}return dp[n - 1];}

2.leetcode_63不同路徑Ⅱ

在這里插入圖片描述
思路:和上一題區別在于存在障礙物,那么若存在障礙物,dp[i][j] 置為0
還有初始化上的區別:上一題直接 i == 0 || j == 0時,置為1,這次需要判斷當前位置及當前位置以前有沒有障礙,有的話就是0了,所以把初始化這部分單獨拿出來。

	int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起點或終點出現了障礙,直接返回0return 0;vector<vector<int>> dp(m, vector<int>(n, 0));dp[0][0] = !obstacleGrid[0][0];for(int i = 1; i < n; i++)dp[0][i] = dp[0][i-1] & !obstacleGrid[0][i];for(int j = 1; j < m; j++)dp[j][0] = dp[j-1][0] & !obstacleGrid[j][0];for(int i = 1; i < m; i++) for(int j = 1; j < n; j++) {if(obstacleGrid[i][j] == 1) {dp[i][j] = 0; } else dp[i][j] = dp[i-1][j] + dp[i][j-1];}// for(int i = 0; i < m; i++) {//     for(int j = 0; j < n; j++) {//         cout << dp[i][j] << " ";//     }//     cout << endl;// }return dp[m-1][n-1];}

看了一下題解,總體思路差不多,但是比我的能簡潔一點,貼出部分代碼:

  1. 在初始化dp時,我的做法是全部賦值了,但這里進行了判斷,減少了不必要的賦值操作
	for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;
  1. 在循環處理dp數組時,如果當前存在障礙,我又雙叒做了無效賦值操作,直接跳過就好了
	for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1) continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}
}

3.leetcode_343整數拆分

在這里插入圖片描述
思路:
a(c-a) = -a2 + ac, 在 a = -c(2*-1) 最大,a = c/2;
同理如果是三個 a + b + c = C; a (C-(c+a))(C-(a+b)),好好好不會了
動態規劃上場,所犯不明白為啥要用動態規劃

  1. dp[i]:分拆數字i,可以得到的最大乘積為dp[i]。

  2. i可以拆成 i-1 + 1 或者 i - 2 + 2, …i-i/2 + i/2;求這個的最大值,即 f[i] = max(f(i-1)*f(1), f(i-2)*f(2), … , f(i-i/2)*f(i/2)); 這感覺和沒有差不多。。。模擬了一下發現還少了一種情況,即當前元素 i > dp[i],這時應該用當前元素和dp[i]的最大值。f[i] = max(max(f(i-1), i-1)*f(1),

  3. 初始化dp數組, dp[1] = 1; dp[2] = 1;

  4. 從1~n;

  5. 有點推不出來了,看下題解吧

  6. i可以拆分為兩個或者多個,如果是兩個那么 dp[i] = max({j, i-j}); 如果是多個,那么 dp[i] = max({j, dp[i-j]}), 使用dp[i] 保存前一次比較結果,即 dp[i] = max(dp[i], j*(i-j), j*dp[i-j]);

    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 >> 1; j++) {dp[i] = max(dp[i], max(j * (i-j), j * dp[i-j]));	}	}return dp[n];}

4.leetcode_96不同的二叉樹搜索

在這里插入圖片描述
思路:不會,舉例找規律
n = 1 ,1個 0
n = 2, 2個 4
n = 3 5 8
n = 4 14 16
n = 5 42 32
n = 6 132 64
n = 7 429 128

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

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

相關文章

運維鍋總淺析云原生DevOps工具

本文從Tekton與Kubevela、Jenkins、GitLab CI的區別與聯系對常見的云原生DevOps工具進行對比分析&#xff0c;最后給出DevOps工具選型思路。希望對您有所幫助&#xff01; 一、DevOps簡介 DevOps是一種結合了軟件開發&#xff08;Development&#xff09;和IT運維&#xff08…

怎么在windows、linux、mac上安裝pnpm呢?

怎么在windows、linux、mac上安裝pnpm呢&#xff1f; 前言 如果您不使用獨立腳本或 pnpm/exe 來安裝 pnpm&#xff0c;則需要在系統上安裝 Node.js&#xff08;至少 v16.14&#xff09;。 原址&#xff1a;https://pnpm.io/zh/installation 使用獨立腳本安裝 即使沒有安裝…

登錄功能和校驗

基礎版 controller package com.web.management.controller;import com.web.management.pojo.Emp; import com.web.management.pojo.Result; import com.web.management.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.anno…

Ignis 應用: 社交 + 游戲 + 工業4.0,Ignis 構建Web3生態圈

引言 在數字經濟快速發展的今天&#xff0c;Web3技術為我們帶來了前所未有的變革。作為Ardor平臺的主要子鏈&#xff0c;Ignis公鏈在推動Web3生態系統建設中扮演了重要角色。本文將通過介紹Vessel Chain、Mythical Beings和Bridge Champ等應用&#xff0c;探討Ignis公鏈如何通…

GB/T 43566-2023中小學人造草面層足球場地檢測

人造草面層是指以類似天然草的合成纖維經機械編織固定于底布上形成人造草&#xff0c;至現場粘接并與彈性墊層等必要的其他材料組裝成整體的面層。 GB/T 43566-2023中小學人造草面層足球場地檢測項目&#xff1a; 測試項目 測試方法 人造草物理性能 GB/T 20394 人造草有害…

html+css+js文章模板

圖片 源代碼在圖片后面&#xff0c;點贊加關注&#xff0c;謝謝&#x1f604; 源代碼 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width,…

redis的數據類型對應的使用場景

Redis提供了多種數據類型&#xff0c;每種數據類型都有其特定的適用場景。以下是Redis主要數據類型及其典型應用場景&#xff1a;1. 字符串(String) 應用場景&#xff1a;適用于存儲簡單的鍵值對數據&#xff0c;如用戶基本信息、計數器&#xff08;如網頁訪問次數&…

停車場車牌識別計費系統,用Python如何實現?

關注星標&#xff0c;每天學習Python新技能 前段時間練習過的一個小項目&#xff0c;今天再看看&#xff0c;記錄一下~ 項目結構 說明&#xff1a; datefile文件夾&#xff1a;保存車輛信息表的xlsx文件 file文件夾&#xff1a;保存圖片文件夾。ic_launcher.jpg是窗體的右上角…

周下載量20萬的npm包---store

https://www.npmjs.com/package/store <script setup> import { onMounted } from vue import store from storeonMounted(() > {store.set(user, { name: xutongbao })let user store.get(user)console.log(user) //對象console.log(localStorage.getItem(user)) //…

基于深度學習的換頭特效

基于深度學習的換頭特效是一項計算機視覺和圖像處理技術&#xff0c;旨在將一個人的臉部特征無縫替換到另一個人的頭部&#xff0c;同時保持自然和真實的視覺效果。這項技術廣泛應用于電影制作、虛擬現實、娛樂和社交媒體等領域。以下是關于這一領域的系統介紹&#xff1a; 1.…

linux nfs的使用

版權聲明&#xff1a;來自百度AI&#xff0c;此處記錄是方便日后查看&#xff0c;無任何商業用途 linux網絡文件共享服務之nfs NFS&#xff08;Network File System&#xff09;是一種允許計算機用戶或者操作系統通過網絡以類似本地的方式訪問文件的協議。以下是一個簡單的NF…

CesiumJS【Basic】- #056 繪制紋理填充多邊形(Entity方式)-使用shader

文章目錄 繪制紋理填充多邊形(Entity方式)-使用shader1 目標2 代碼2.1 main.ts繪制紋理填充多邊形(Entity方式)-使用shader 1 目標 使用Entity方式繪制繪制紋理填充多邊形 - 使用shader 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium…

搭建個人博客及錯誤記錄

搭建個人博客及錯誤記錄 文章目錄 搭建個人博客及錯誤記錄需要用到的網址2.推薦兩個參考教學視頻3.發布一篇博客個人主題配置的提醒localhost拒絕連接問題解決辦法ssh -T gitgithub.com失敗問題解決Deployer not found:git解決 可以根據目錄解決遇到的相同問題 需要用到的網址 …

朋友圈運營必備!一鍵轉發和自動轉發輕松搞定!

你還在手動發布多個微信號的朋友圈嗎&#xff1f; 現在&#xff0c;就教你一招&#xff0c;讓你輕松實現一鍵轉發和自動轉發朋友圈&#xff01; 首先&#xff0c;我們需要在個微管理系統上登錄自己的微信號&#xff0c;以便進行統一管理。這個系統可以多個微信號同時登錄&…

項目經驗-不同行業、不同風格的網站設計

網站UI設計的首要考慮點是布局與導航。合理的布局能夠確保信息清晰呈現&#xff0c;使用戶能夠快速定位所需內容。同時&#xff0c;簡潔明了的導航設計能夠引導用戶流暢瀏覽&#xff0c;減少迷失感。通過精心設計的布局和導航&#xff0c;可以提升用戶體驗&#xff0c;增強用戶…

Pointnet++改進即插即用系列:全網首發GLSA聚合和表示全局和局部空間特征|即插即用,提升特征提取模塊性能

簡介:1.該教程提供大量的首發改進的方式,降低上手難度,多種結構改進,助力尋找創新點!2.本篇文章對Pointnet++特征提取模塊進行改進,加入GLSA,提升性能。3.專欄持續更新,緊隨最新的研究內容。 目錄 1.理論介紹 2.修改步驟 2.1 步驟一 2.2 步驟二 2.3 步驟三 1.理論介…

深入剖析Tomcat(十五、十六) 關閉鉤子,保證Tomcat的正常關閉

《深入剖析Tomcat》書中第十五章講解了如何通過配置XML的方式來配置Tomcat的各個組件&#xff0c;并通過Digester庫來解析XML。我們常操作的xml文件應該就是 server.xml這個文件&#xff0c;當在一臺機器上部署多個Tomcat時&#xff0c;就必須修改連接器和 [“關閉Tomcat”程序…

網格搜索(Grid Search)及其Python和MATLAB實現

**背景&#xff1a;** 網格搜索&#xff08;Grid Search&#xff09;是一種常見的參數優化方法&#xff0c;用于在給定的參數范圍內搜索最優的參數組合&#xff0c;以優化模型的性能。該方法通過窮舉搜索參數空間中的所有可能組合&#xff0c;尋找最佳參數配置&#xff0c;是調…

Spring源碼九:BeanFactoryPostProcessor

上一篇Spring源碼八&#xff1a;容器擴展一&#xff0c;我們看到ApplicationContext容器通過refresh方法中的prepareBeanFactory方法對BeanFactory擴展的一些功能點&#xff0c;包括對SPEL語句的支持、添加屬性編輯器的注冊器擴展解決Bean屬性只能定義基礎變量的問題、以及一些…

Netty 粘包/拆包、解碼工具類

1. 概述 1.1 粘包 發送 abc def&#xff0c;接收 abcdef 原因 滑動窗口&#xff1a;假設發送方 256 bytes 表示一個完整報文&#xff0c;但由于接收方處理不及時且窗口大小足夠大&#xff0c;這 256 bytes 字節就會緩沖在接收方的滑動窗口中&#xff0c;當滑動窗口中緩沖了…