leetcode 321. 拼接最大數(單調棧)

給定長度分別為 m 和 n 的兩個數組,其元素由 0-9 構成,表示兩個自然數各位上的數字。現在從這兩個數組中選出 k (k <= m + n) 個數字拼接成一個新的數,要求從同一個數組中取出的數字保持其在原數組中的相對順序。

求滿足該條件的最大數。結果返回一個表示該最大數的長度為 k 的數組。

說明: 請盡可能地優化你算法的時間和空間復雜度。

示例 1:

輸入:
nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
輸出:
[9, 8, 6, 5, 3]

代碼

class Solution {public int[] maxNumber(int[] nums1, int[] nums2, int k) {int m=nums1.length,n=nums2.length;int[] res=new int[k];int s=Math.max(0,k-n),end=Math.min(k,m);for(int i=s;i<=end;i++)//遍歷nums1和nums2不同取數情況返回的最大數組,返回最大的結果{int[] cur=merge(getMaxNumber(nums1, i),getMaxNumber(nums2, k-i));if(comp(cur,0,res,0))res=cur;}return res;}public boolean comp(int[] nums1,int p1 ,int[] nums2, int p2) {
//比較兩個序列,如果前面元素都相同,則長度大的較大if(p2>=nums2.length) return true;if(p1>=nums1.length) return false;if(nums1[p1]>nums2[p2]) return true;if(nums1[p1]<nums2[p2]) return false;return comp(nums1, p1+1, nums2, p2+1);}public int[] merge(int[] nums1, int[] nums2) {int n=nums1.length,m=nums2.length;int cur=0,p1=0,p2=0;int []ret=new int[n+m];while (p1<n||p2<m)//合并兩個數組{if(comp(nums1,p1,nums2,p2))ret[cur++]=nums1[p1++];else ret[cur++]=nums2[p2++];}return ret;}public int[] getMaxNumber(int[] nums1, int k) {//單調棧找出單個數組的最大排列int n=nums1.length,rem=n-k,top=-1;int[] stack=new int[k];for(int i=0;i<n;i++){int cur=nums1[i];while (top>=0&&cur>stack[top]&&rem>0){top--;rem--;}if(top<k-1)stack[++top]=cur;else rem--;//可刪除的額度減一,當可刪除的額度用盡,將不能再移除元素(為了保證返回數組的長度)}return stack;}
}

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

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

相關文章

Oracle Study之--Oracle等待事件(5)

Db file single write這個等待事件通常只發生在一種情況下&#xff0c;就是Oracle 更新數據文件頭信息時&#xff08;比如發生Checkpoint&#xff09;。當這個等待事件很明顯時&#xff0c;需要考慮是不是數據庫中的數據文件數量太大&#xff0c;導致Oracle 需要花較長的時間來…

兩臺centos之間免密傳輸 scp

兩臺linux服務器之間免密scp&#xff0c;在A機器上向B遠程拷貝文件 操作步驟&#xff1a;1、在A機器上&#xff0c;執行ssh-keygen -t rsa&#xff0c;一路按Enter&#xff0c;不需要輸入任何內容。&#xff08;如有提示是否覆蓋&#xff0c;可輸入y后按回車&#xff09;2、到/…

jsp導出數據時離開頁面_您應該在要離開的公司開始使用數據

jsp導出數據時離開頁面If you’re new in data science, “doing data science” likely sounds like a big deal to you. You might think that you need meticulously collected data, all the tools for data science and a flawless knowledge before you can claim that y…

分步表單如何實現 html_HTML表格入門的分步指南

分步表單如何實現 htmlby Abhishek Jakhar通過阿比舍克賈卡(Abhishek Jakhar) HTML表格入門的分步指南 (A step-by-step guide to getting started with HTML tables) 總覽 (Overview) The web is filled with information like football scores, cricket scores, lists of em…

laravel mysql pdo,更改Laravel中的基本PDO配置

My shared web host have some problems with query prepares and I want to enable PDOs emulated prepares, theres no option for this in the config\database.php.Is there any way I can do that in Laravel?解決方案You can add an "options" array to add o…

Java多線程-工具篇-BlockingQueue

Java多線程-工具篇-BlockingQueue 轉載 http://www.cnblogs.com/jackyuj/archive/2010/11/24/1886553.html 這也是我們在多線程環境下&#xff0c;為什么需要BlockingQueue的原因。作為BlockingQueue的使用者&#xff0c;我們再也不需要關心什么時候需要阻塞線程&#xff0c;什…

leetcode 204. 計數質數

統計所有小于非負整數 n 的質數的數量。 示例 1&#xff1a; 輸入&#xff1a;n 10 輸出&#xff1a;4 解釋&#xff1a;小于 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。 解題思路 大于等于5的質數一定和6的倍數相鄰。例如5和7&#xff0c;11和13,17和19等等&#xff1b…

JAVA 網絡編程小記

在進行JAVA網絡編程時&#xff0c;發現寫入的數據對方等200ms左右才會收到。起初認為是JAVA自已進行了 Cache。進行flush也沒有效果。查看JDK代碼&#xff0c;Write操作直接調用的native方法&#xff0c;說明JAVA層面并沒有緩存。再看flush&#xff0c;只是一個空方法. FileOut…

vue生成靜態js文件_如何立即使用Vue.js生成靜態網站

vue生成靜態js文件by Ond?ej Polesn通過Ond?ejPolesn 如何立即使用Vue.js生成靜態網站 (How to generate a static website with Vue.js in no time) You have decided to build a static site, but where do you start? How do you select the right tool for the job wit…

查看文件夾大小的4種方法,總有一種是你喜歡的

有必要檢查文件夾的大小,以確定它們是否占用了太多的存儲空間。此外,如果你通過互聯網或其他存儲設備傳輸文件夾,還需要查看文件夾大小。 幸運的是,在Windows設備上查看文件夾大小非常容易。窗口中提供了圖形化和基于命令行的應用程序,為你提供了多種方法。 如何在Windo…

Python 獲取服務器的CPU個數

在使用gunicorn時&#xff0c;需要設置workers&#xff0c; 例如&#xff1a; gunicorn --workers3 app:app -b 0.0.0.0:9000 其中&#xff0c;worker的數量并不是越多越好&#xff0c;推薦值是CPU的個數x21&#xff0c; CPU個數使用如下的方式獲取&#xff1a; python -c impo…

多種數據庫連接工具_20多種熱門數據工具及其不具備的功能

多種數據庫連接工具In the past few months, the data ecosystem has continued to burgeon as some parts of the stack consolidate and as new challenges arise. Our first attempt to help stakeholders navigate this ecosystem highlighted 25 Hot New Data Tools and W…

怎么連接 mysql_怎樣連接連接數據庫

這個博客是為了說明怎么連接數據庫第一步&#xff1a;肯定是要下載數據庫&#xff0c;本人用的SqlServer2008&#xff0c;是從別人的U盤中拷來的。第二步&#xff1a;數據庫的登錄方式設置為混合登錄&#xff0c;步驟如下&#xff1a;1.打開數據庫這是數據庫界面&#xff0c;要…

webstorm環境安裝配置(less+autoprefixer)

node安裝&#xff1a; 參考地址&#xff1a;http://www.runoob.com/nodejs/nodejs-install-setup.html 1.下載node安裝包并完成安裝 2.在開始菜單打開node 3.查看是否安裝完成&#xff08;npm是node自帶安裝的&#xff09; 命令&#xff1a;node -v npm -v less安裝&#xff1a…

leetcode 659. 分割數組為連續子序列(貪心算法)

給你一個按升序排序的整數數組 num&#xff08;可能包含重復數字&#xff09;&#xff0c;請你將它們分割成一個或多個子序列&#xff0c;其中每個子序列都由連續整數組成且長度至少為 3 。 如果可以完成上述分割&#xff0c;則返回 true &#xff1b;否則&#xff0c;返回 fa…

將JAVA編譯為EXE的幾種方法

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 將JAVA編譯為EXE的幾種方法 -------------------------------------------------------------------------------- 將Java應用程序本地編譯為EXE的幾種方法(建議使用JOVE和JET)  a.…

文本訓練集_訓練文本中的不穩定性

文本訓練集介紹 (Introduction) In text generation, conventionally, maximum likelihood estimation is used to train a model to generate a text one token at a time. Each generated token will be compared against the ground-truth data. If any token is different …

山東省賽 傳遞閉包

https://vjudge.net/contest/311348#problem/A 思路&#xff1a;用floyd傳遞閉包處理點與點之間的關系&#xff0c;之后開數組記錄每個數字比它大的個數和小的個數&#xff0c;如果這個個數超過n/2那么它不可能作為中位數&#xff0c;其他的都有可能。 #include<bits/stdc.h…

如何使用動態工具提示構建React Native圖表

by Vikrant Negi通過Vikrant Negi 如何使用動態工具提示構建React Native圖表 (How to build React Native charts with dynamic tooltips) Creating charts, be it on the web or on mobile apps, has always been an interesting and challenging task especially in React …

如何解決ajax跨域問題(轉)

由 于此前很少寫前端的代碼(哈哈&#xff0c;不合格的程序員啊)&#xff0c;最近項目中用到json作為系統間交互的手段&#xff0c;自然就伴隨著眾多ajax請求&#xff0c;隨之而來的就是要解決 ajax的跨域問題。本篇將講述一個小白從遇到跨域不知道是跨域問題&#xff0c;到知道…