DAY21

題目一

給定三個字符串str1、str2和aim, 如果aim包含且僅包含來自str1和str2的所有字符,而且在aim中屬于str1的字符 之間保持原來在str1中的順序,屬于str2的字符之間保持原來在str2中的順序,那么稱aim是str1和str2的交錯組成。實現一個函數,判斷aim是 否是str1和str2交錯組成
[舉例] str1="AB", str2="12"。 那么"AB12"、"A1B2"、 "A12B"、 "1A2B"和"1AB2"等都是str1和str2的交錯組成
?

雙指針法只能用在沒有重復值的情況?如果有重復值?雙指針法就不再適用了

首先如果長度不一致的話?aim!=str1+str2的時候?直接過濾掉

dp[i][j]?是str1 0....i和str2 0....j?能否交錯組成aim 0.....i+j

basecase的話?第一行還算好找?第一列也是??

經典字符串考慮?不要的情況?dp[0]位置全是str1一個字符都不要?不過這么做之后確實簡單了不少?要不basecase就夠喝一壺了

所以?相等就是可以?不等就是不行

然后dp[i][j]依賴于?它的前一個格子和上一個格子

就是你新加入了一個字符?那么我們就看這個新加的字符和aim對應位置的字符是否相同

因為是交錯組成?假如說前面已經是兩個字符串交錯組成而來的話那我們只需要看最新的位置

if(s3.length()!=s1.length()+s2.length()) {return false;}char [] aim = s3.toCharArray();char [] chars1 = s1.toCharArray();char [] chars2 = s2.toCharArray();int length1 = chars1.length;int length2 = chars2.length;boolean [][] dp = new boolean [length1+1][length2+1];dp[0][0] = true;for(int i = 1;i<=length1;i++) {if(chars1[i-1]!=aim[i-1]) {break;}dp[i][0] = true;  }for(int i = 1;i<=length2;i++) {if(chars2[i-1]!=aim[i-1]) {break;}dp[0][i] = true;  }for(int i = 1;i<=length1;i++) {for(int j = 1;j<=length2;j++) {if ((chars1[i - 1] == aim[i + j - 1] && dp[i - 1][j])|| (chars2[j - 1] == aim[i + j - 1] && dp[i][j - 1])) {dp[i][j] = true;}}}return dp[length1][length2];}

題目二

給定一個無序數組arr.如果只能再一個子數組上排序 返回如果讓arr整體有序,需要排序的最短子數組長度
無論中間的有序數組有多長?邊上有元素無序都不行?所以我們看兩側不用排的有多少?

public static int [] getMinLength(int[] arr) {if (arr == null || arr.length < 2) {return new int [] {-1,-1};}int N = arr.length;int leftno = -1;int max = arr[0];int righton = -1;int min = arr[N-1];for(int i = 1;i<N;i++) {if(max > arr[i]) {leftno = i-1;break;}max = arr[i];}for(int i = N-2;i>=0;i--) {if(min<arr[i]) {righton = i+1;break;}min = arr[i];}return new int [] {leftno,righton};}

我剛開始是這么寫的?但是只是兩邊有序是不行的?例如 1,2,3......?1,2,3? 這樣的?就是錯的??

從后往前找?找到最前面一個無序的?從前往后找?找最后一個無序的?這樣才對?這樣找出來的才是最邊上的無序的

第三題

讀題都得讀一會?

要注意我們要求的是整個數組的最小組成和?不是某個子數組的不可組成和?只要一個子數組可以組成?那么整體就可以組成

做一個dp數組?dp[i][j]?表示數組0...i的累加和能否得到j

啊?填第一列?肯定能?我一個不要?不就是累加和0

dp[i][j]? 它依賴于dp[i-1][j-arr[i]]? 如果只用i-1個元素?就能湊出j-arr[i]的話?那么我們再加上一個元素?就能湊出j

或者?dp[i-1][j]?如果四個元素都能推出j?那五個元素也能推出?我不要新的元素不就得了

所以這個格子的位置是?可不可以推出?而不是等不等于

可以有可以的推法被?可以是包含等于的?所以我們又有了個依賴dp[i-1][j]

既然我有 0....i了?那我就可以湊出任何一個位置的?累加和可不可以得到某個值(其實用不上?只要最后一行?所有元素都要能推出什么值)

然后我們拿最后一行?也就是說我們用所有元素?可以推出什么不可以推出什么

啊?所以最開始我們求sum的時候把min和一起求了?后面還有用(max不用求?就是sum)

public static int  unformedSum(int[] arr) {if (arr == null || arr.length == 0) {return 1;}int N = arr.length;int Min = Integer.MAX_VALUE;int sum = 0;for (int i : arr) {Min = Math.min(Min,i);sum+=i;}boolean [][] dp = new boolean [N][sum+1];for(int i = 1;i<N;i++) {dp[i][0] = true;}for(int i = 0;i<N;i++) {for(int j = 1;j<sum+1;j++) {dp[i][j] = dp[i-1][j]||((j-arr[i]>=0)?dp[i-1][j-arr[i]]:false);}}for (int j = min; j <= sum; j++) {if (!dp[N - 1][j]) {return j;}}return sum + 1;}

那么升級版的問題怎么解

整數數組永遠包含1?也就是最小不可組成和永遠要從2開始算

先把整個數組從小到大排序

定義一個變量?range?含義是1.....range的數都可求

a是一個遍歷數組的指針

如果a<=range+1

那么就?range =?range+a?舉個例子 a = 5?range = 20?也就是說range<=20的所有數都能求出來?那么就必然存在 20+5 19+5 18+5 +17+5?讓它把21到25填好

如果a>range+1

a = 50; range = 30? 50>31?前面的一堆玩意都湊不出來31?你比31還大?那更湊不出來了?第一個出現的大于就是最小不可求

為啥是range+1?當a==range+1 的時候? 假如說a = 5?range = 4?這個時候? 9完全可以通過之前的方式得出?如果a要是再大一點呢 6 a = 6?range仍等于4?那么4通過累加就無法得到5了?他們就缺了?這個東西本質是要求?range的最大范圍要和a是相鄰的?才能嚴格的推出每一個值

4 5?相鄰?中間沒有真空期是前面的累加不出來?加上后面的更累加不出來?range后面這個數?要一個數加上a才能累加出來?如果a本身就比這個大?那家多少都累加不出來

public static int unformedSum3(int[] arr) {if (arr == null || arr.length == 0) {return 0;}Arrays.sort(arr); // O (N * logN)int range = 1;// arr[0] == 1for (int i = 1; i != arr.length; i++) {if (arr[i] > range + 1) {return range + 1;} else {range += arr[i];}}return range + 1;}

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

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

相關文章

Springboot-Retrofit HTTP工具框架快速使用

在SpringBoot項目直接使用okhttp、httpClient或者RestTemplate發起HTTP請求&#xff0c;既繁瑣又不方便統一管理。 因此&#xff0c;在這里推薦一個適用于SpringBoot項目的輕量級HTTP客戶端框架retrofit-spring-boot-starter&#xff0c;使用非常簡單方便&#xff0c;同時又提供…

約數個數(質因子分解)

思路&#xff1a; &#xff08;1&#xff09;由數論基本定理&#xff0c;任何一個正整數x都能寫作&#xff0c;其中p1,p2..pk為x的質因子。 &#xff08;2&#xff09;由此可以推斷&#xff0c;要求一個數約數的個數&#xff0c;注意到約數就是p1,p2...pk的一種組合&#xff…

日常BUG—— SpringBoot項目DEBUG模式啟動慢、卡死。

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 我們調試程序時&#xff0c;需要使用DEBUG模式啟動SpringBoot項目&#xff0c; 有時候會發…

convert Auto-Login (cwallet.sso) Wallet into a PKCS12 compliant Wallet

一步不行嗎 &#xff1f; 1. If $JAVA_HOME is not set: a)For FMW 11g components associated with a WebLogic Domain or a FMW 12c Collocated OHS install run: $MIDDLEWARE_HOME/user_projects/domains/<domain>/bin/setDomainEnv.sh b) For FMW 11g Standalone…

側滑置頂,取消置頂

第一步:布局 <?xml version"1.0" encoding"utf-8"?> <com.ddmh.magic.camera.ui.widget.SwipeMenuLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…

SQL | 使用通配符進行過濾

6-使用通配符進行過濾 6.1-LIKE操作符 前面介紹的所有操作符都是通過已知的值進行過濾&#xff0c;或者檢查某個范圍的值。但是如果我們想要查找產品名字中含有bag的數據&#xff0c;就不能使用前面那種過濾情況。 利用通配符&#xff0c;可以創建比較特定數據的搜索模式。 …

selenium 爬蟲

selenium 可以動態爬取網頁數據&#xff0c;就像真實用戶操作瀏覽器一樣&#xff0c;從終端用戶的角度測試應用程序&#xff0c;WebDriver通過原生瀏覽器支持或者瀏覽器擴展直接控制瀏覽器 webdriver下載 因為selenuim對瀏覽器的版本存在兼容問題&#xff0c;顧需要針對指定瀏…

SAP系統是什么呢?它有哪些優勢?

SAP系統是全球知名的企業資源規劃&#xff08;ERP&#xff09;解決方案供應商。它集成了財務、供應鏈管理、人力資源管理、銷售和客戶關系管理等多個功能模塊&#xff0c;為企業提供全面、集成的管理體驗。SAP系統已成為各行各業企業管理的智慧選擇&#xff0c;極大地提升了管理…

c++ 有元

友元分為兩部分內容 友元函數友元類 友元函數 問題&#xff1a;當我們嘗試去重載operator<<&#xff0c;然后發現沒辦法將operator<<重載成成員函數。因為cout的輸出流對象和隱含的this指針在搶占第一個參數的位置。this指針默認是第一個參數也就是左操作 數了。…

如何在vue3中加入markdown語法

1、首先需要安裝 md-editor-v3 yarn add md-editor-v3 或者是在vue圖形化界面中直接搜索 md-editor-v3 進行安裝。 2、引入該編輯頁 引入可以參考這個&#xff0c;根據自己的需求進行修改和添加。 <template><md-editor v-model"text"/> </templat…

基于dbn+svr的交通流量預測,dbn詳細原理

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) DBN+SVR的交通流量預測 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類算法,本文將DBN+SVR用于交通流量預測…

二叉樹題目:二叉樹的直徑

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 解法思路和算法代碼復雜度分析 題目 標題和出處 標題&#xff1a;二叉樹的直徑 出處&#xff1a;543. 二叉樹的直徑 難度 3 級 題目描述 要求 給定二叉樹的根結點 root \texttt{root} root&#xff0c;返回其直徑…

考研408 | 【計算機網絡】 傳輸層

導圖 傳輸層的功能 傳輸層的兩個協議 傳輸層的尋址與端口 UDP協議 UDP的主要特點 UDP首部格式&#xff1a; UDP校驗&#xff1a; TCP協議 TCP協議的特點 TCP報文段首部格式 TCP連接管理 TCP的連接建立 SYN洪泛攻擊 TCP的連接釋放 TCP可靠傳輸 序號&#xff1a; 確認&#xff1…

ASEMI快恢復二極管APT80DQ20BG怎么檢查好壞

編輯-Z 二極管APT80DQ20BG是一種高壓快恢復二極管&#xff0c;常用于電源和電能質量控制等領域。如果您的二極管出現故障或需要進行維修&#xff0c;以下是一些可能的解決方案。 首先&#xff0c;確保您已經斷開了電源&#xff0c;并且具備基本的電子維修知識和技能。如果您不…

添加vue devtools擴展工具+添加后F12不顯示Vue圖標

前言&#xff1a;在開啟Vue學習之旅時&#xff0c;遇到問題兩個問題&#xff0c;第一添加不上vue devtools擴展工具&#xff0c;第二添加完成后&#xff0c;F12不顯示Vue圖標。查閱了很多博客&#xff0c;自己解決了問題&#xff0c;故寫此博客記錄。如果你遇到和我一樣的問題&…

React源碼解析18(3)------ beginWork的工作流程【mount】

摘要 OK&#xff0c;經過上一篇文章。我們調用了&#xff1a; const root document.querySelector(#root); ReactDOM.createRoot(root)生成了FilberRootNode和HostRootFilber。 并且二者之間的對應關系也已經確定。 而下一步我們就需要調用render方法來講react元素掛載在ro…

【JavaEE進階】SpringBoot 日志

文章目錄 一. 日志有什么用?二. 自定義日志打印1. 日志的使用與打印 三. 日志級別1. 日志級別有什么用?2. 日志級別的分類及使用 四. 日志持久化五. 更簡單的日志輸出---Lombok1. Lombok的使用2. lombok原理解釋2.1 Lombok更多注解說明 一. 日志有什么用? 在Java中&#xf…

【結構型設計模式】C#設計模式之外觀模式

題目描述&#xff1a; 假設你正在開發一個音樂播放器應用程序&#xff0c;該應用程序需要與多個子系統進行交互&#xff0c;包括音頻解碼、音量控制和播放控制等。請使用外觀模式設計一個音樂播放器的外觀類&#xff0c;并實現相應的子系統類。 要求&#xff1a; 創建一個外觀…

【gogogo專欄】指針

go語言指針 為什么需要指針指針使用實例值傳遞地址傳遞多級指針 為什么需要指針 作為一個大學劃水&#xff0c;畢業一直寫java的程序員來說&#xff0c;多多少少對于指針有點陌生&#xff0c;由于近期需要轉go&#xff0c;正好學到指針這里&#xff0c;就來探究下指針的使用場景…

ThreadLocal詳解

ThreadLocal詳解 一、故事背景二、知識點主要構成1、什么是ThreadLocal&#xff1f;2、ThreadLocal的基本使用內存泄漏問題引用類型&#xff1a;強引用&#xff1a;軟引用弱引用虛引用 ThreadLocal內存泄漏原因 三、總結提升 一、故事背景 最近在學習并發編程相關內容&#xf…