JAVA學習-練習試用Java實現“拼接最大數”

問題:


給定長度分別為 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]
示例 2:

輸入:
nums1 =?
[6, 7]

nums2 =?
[6, 0, 4]

k =?
5

輸出:
[6, 7, 6, 0, 4]
示例 3:

輸入:
nums1 =?
[3, 9]

nums2 =?
[8, 9]

k =?
3

輸出:
[9, 8, 9]

解答思路:

以下是使用 Java 實現拼接最大數的示例代碼:

import java.util.Arrays;import java.util.Comparator;import java.util.PriorityQueue;class Solution {public int[] maxNumber(int[] nums1, int[] nums2, int k) {int m = nums1.length;int n = nums2.length;int[] result = new int[k];Arrays.fill(result, -1);// 從數組 nums1 中選擇 i 個數字,從數組 nums2 中選擇 k - i 個數字for (int i = Math.max(0, k - n); i <= Math.min(k, m); i++) {int[] subsequence1 = getMaxSubsequence(nums1, i);int[] subsequence2 = getMaxSubsequence(nums2, k - i);int[] merged = merge(subsequence1, subsequence2);if (isGreater(merged, result, 0, 0)) {System.arraycopy(merged, 0, result, 0, k);}}return result;}// 獲取數組的最大子序列,長度為 lenprivate int[] getMaxSubsequence(int[] nums, int len) {int[] stack = new int[len];int top = -1;for (int i = 0; i < nums.length; i++) {while (top >= 0 && stack[top] < nums[i] && top + nums.length - i > len) {top--;}if (top < len - 1) {stack[++top] = nums[i];}}return stack;}// 合并兩個子序列private int[] merge(int[] subsequence1, int[] subsequence2) {int[] merged = new int[subsequence1.length + subsequence2.length];int i = 0, j = 0, k = 0;while (i < subsequence1.length && j < subsequence2.length) {if (subsequence1[i] > subsequence2[j]) {merged[k++] = subsequence1[i++];} else if (subsequence1[i] < subsequence2[j]) {merged[k++] = subsequence2[j++];} else {int p = i + 1, q = j + 1;while (p < subsequence1.length && q < subsequence2.length && subsequence1[p] == subsequence2[q]) {p++;q++;}if (q == subsequence2.length || (p < subsequence1.length && subsequence1[p] > subsequence2[q])) {merged[k++] = subsequence1[i++];} else {merged[k++] = subsequence2[j++];}}}while (i < subsequence1.length) {merged[k++] = subsequence1[i++];}while (j < subsequence2.length) {merged[k++] = subsequence2[j++];}return merged;}// 比較兩個整數數組,如果 num1 更大,則返回 true,否則返回 falseprivate boolean isGreater(int[] num1, int[] num2, int index1, int index2) {while (index1 < num1.length && index2 < num2.length) {if (num1[index1]!= num2[index2]) {return num1[index1] > num2[index2];}index1++;index2++;}return index1!= num1.length;}public static void main(String[] args) {Solution solution = new Solution();int[] nums1 = {3, 4, 6, 5};int[] nums2 = {9, 1, 2, 5, 8, 3};int k = 5;int[] result = solution.maxNumber(nums1, nums2, k);System.out.println(Arrays.toString(result));}}

上述示例代碼中,定義了一個名為'Solution'的類。'maxNumber'方法用于拼接兩個數組的最大數,通過遍歷從兩個數組中選擇不同長度的數字,得到最大子序列,并利用輔助方法'merge'、'getMaxSubsequence'和'isGreater'進行合并、獲取子序列和比較。'merge'方法用于合并兩個數組,利用雙指針進行比較和合并。'getMaxSubsequence'方法用于獲取最大子序列,通過單調棧保存當前最大數字。'isGreater'方法用于比較兩個整數數組的大小。

(文章為作者在學習java過程中的一些個人體會總結和借鑒,如有不當、錯誤的地方,請各位大佬批評指正,定當努力改正,如有侵權請聯系作者刪帖。)

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

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

相關文章

iview中checkbox多選框帶實際值和顯示值的寫法

<CheckboxGroup v-model"selectHotworkMeasures"><Checkboxv-for"item in hotworkMeasuresList":key"item.key">{{ item.name }}</Checkbox></CheckboxGroup>selectHotworkMeasures: [],

python操作SQLite3數據庫進行增刪改查

python操作SQLite3數據庫進行增刪改查 1、創建SQLite3數據庫 可以通過Navicat圖形化軟件來創建: 2、創建表 利用Navicat圖形化軟件來創建: 存儲在 SQLite 數據庫中的每個值(或是由數據庫引擎所操作的值)都有一個以下的存儲類型: NULL. 值是空值。 INTEGER. 值是有符…

Python 算法交易實驗76 QTV200日常推進

說明 最近實在太忙&#xff0c; 沒太有空推進這個項目&#xff0c;我想還是盡量抽一點點時間推進具體的工程&#xff0c;然后更多的還是用碎片化的時間從整體上對qtv200進行設計完善。有些結構的問題其實是需要理清的&#xff0c;例如&#xff1a; 1 要先基于原始數據進行描述…

浪潮信息元腦服務器支持英特爾?至強?6能效核處理器 展現強勁性能

如今&#xff0c;服務器作為數字經濟的核心基礎設施&#xff0c;正面臨著前所未有的挑戰和機遇。作為服務器領域的領軍企業&#xff0c;浪潮信息始終站在行業前沿&#xff0c;不斷推陳出新&#xff0c;以滿足客戶日益增長的需求。近日&#xff0c;浪潮信息再次展現技術實力&…

基于GWO-CNN-BiLSTM數據回歸預測(多輸入單輸出)-灰狼優化算法優化CNN-BiLSTM

基于GWO-CNN-BiLSTM數據回歸預測(多輸入單輸出)-灰狼優化算法優化CNN-BiLSTM 1.數據均為Excel數據&#xff0c;直接替換數據就可以運行程序。 2.所有程序都經過驗證&#xff0c;保證程序可以運行。 3.具有良好的編程習慣&#xff0c;程序均包含簡要注釋。 獲取方式 https:/…

Pandas 基礎 —— 探索數據分析的第一步

引言 在數據科學的世界中&#xff0c;Pandas 以其強大的數據處理能力而成為分析工作的核心工具。本文將引導你走進 Pandas 的大門&#xff0c;從基礎概念到數據清洗的實用技巧&#xff0c;為你的數據分析之路打下堅實的基礎。 Pandas 簡介 Pandas 是一個開源的 Python 數據分…

篩選Github上的一些優質項目

每個項目旁都有標簽說明其特點&#xff0c;如今日熱捧、多模態、收入生成、機器人、大型語言模型等。 項目涵蓋了不同的編程語言和領域&#xff0c;包括人工智能、語言模型、網頁數據采集、聊天機器人、語音合成、AI 代理工具集、語音轉錄、大型語言模型、DevOps、本地文件共享…

p2p、分布式,區塊鏈筆記:libp2p通過libp2p_demo::network實現文件傳遞功能

代碼 代碼來自github開源項目file-sharing.rs。主要依賴clap庫進行命令行參數解析&#xff0c;使用async_std進行并行操作&#xff0c;使用libp2p_demo::network中的相關方法進行網絡建立與文件傳輸&#xff0c;但是代碼量卻減少了很多&#xff0c;這是由于libp2p_demo::netwo…

Matplotlib 學習

知識點 1.plot()&#xff1a;用于繪制線圖和 散點圖scatter() 函數&#xff1a;plot() 函數可以接受許多可選參數&#xff0c;用于控制圖形的外觀&#xff0c;例如&#xff1a;顏色: colorblue 控制線條的顏色。線型: linestyle-- 控制線條的樣式&#xff0c;例如虛線。標記…

YoloV8改進策略:Block改進|輕量實時的重參數結構|最新改進|即插即用(全網首發)

摘要 本文使用重參數的Block替換YoloV8中的Bottleneck&#xff0c;GFLOPs從165降到了116&#xff0c;降低了三分之一&#xff1b;同時&#xff0c;map50-95從0.937漲到了0.947。 改進方法簡單&#xff0c;只做簡單的替換就行&#xff0c;即插即用&#xff0c;非常推薦&#xf…

C++_STL---list

list的相關介紹 list是可以在常數范圍內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代。 list的底層是帶頭雙向循環鏈表結構&#xff0c;鏈表中每個元素存儲在互不相關的獨立節點中&#xff0c;在節點中通過指針指向其前一個元素和后一個元素。…

IDEA與通義靈碼的智能編程之旅

1 概述 本文主要介紹在IDEA中如何安裝和使用通義靈碼來助力軟件編程,從而提高編程效率,創造更大的個人同企業價值。 2 安裝通義靈碼 2.1 打開IDEA插件市場 點擊IDEA的設置按鈕,下拉選擇Plugins,如下: 2.2 搜索通義靈碼 在搜索框中輸入“通義靈碼”,如下: 2.3 安…

C語言 二分法求方程根

用二分法求下面方程在&#xff08;-10&#xff0c;10&#xff09;的根。 2x^3-4x^23x-60 這個程序使用二分法求方程 2x^3 - 4x^2 3x - 6 0 在區間 (-10, 10) 內的根。 #include <stdio.h> #include <math.h>// 方程 f(x) double f(double x) {return 2 * pow(x…

使用ifconfig命令獲取當前服務器的內網IP地址

如何使用ifconfig命令獲取當前服務器的內網IP地址呢&#xff1f; ifconfig eth0 | grep inet | awk {print $2}

什么是五級流水?銀行眼中的“好流水”,到底是什么樣的?

無論是按揭買房還是日常貸款&#xff0c;銀行流水都是繞不開的一環。規劃好你的流水&#xff0c;不僅能讓你在申請貸款時更有底氣&#xff0c;還可能幫你省下不少冤枉錢。今天&#xff0c;咱們就來一場深度剖析&#xff0c;聊聊如何在按揭貸款、個人經營抵押貸款前&#xff0c;…

相關向量機(Relevance Vector Machine,RVM)及Python和MATLAB實現

**相關向量機&#xff08;Relevance Vector Machine&#xff0c;RVM&#xff09;** 是一種基于貝葉斯框架的機器學習模型&#xff0c;于2001年由Michael Tipping提出。RVM是一種稀疏建模技術&#xff0c;類似于支持向量機&#xff08;SVM&#xff09;&#xff0c;但其重點在于自…

代碼隨想錄 數組部分+代碼可在本地編譯器運行

代碼隨想錄 數組部分&#xff0c;代碼可在本地編譯器運行 文章目錄 數組理論基礎704.二分查找題目&#xff1a;思路二分法第一種寫法二分法第二種寫法 代碼 27.移除元素題目&#xff1a;思路-雙指針法代碼 977.有序數組的平方題目思路-雙指針代碼 209.長度最小的子數組題目&am…

MPI,0號進程發信息,其他進程收信息

進程0向進程1發送值: 42 進程0向進程2發送值: 42 進程0向進程3發送值: 42 進程0向進程4發送值: 42 進程0向進程5發送值: 42 進程1收到的數據是: 42 進程2收到的數據是: 42 進程3收到的數據是: 42 進程5收到的數據是: 42 進程4收到的數據是: 42 #include <mpi.h> #include…

ChatGPT4深度解析:探索智能對話新境界

大模型chatgpt4分析功能初探 目錄 1、探測目的 2、目標變量分析 3、特征缺失率處理 4、特征描述性分析 5、異常值分析 6、相關性分析 7、高階特征挖掘 1、探測目的 1、分析chat4的數據分析能力&#xff0c;提高部門人效 2、給數據挖掘提供思路 3、原始數據&#xf…

科研繪圖系列:R語言徑向柱狀圖(Radial Bar Chart)

介紹 徑向柱狀圖(Radial Bar Chart),又稱為雷達圖或蜘蛛網圖(Spider Chart),是一種在極坐標系中繪制的柱狀圖。這種圖表的特點是將數據點沿著一個或多個從中心向外延伸的軸來展示,這些軸通常圍繞著一個中心點均勻分布。 特點: 極坐標系統:數據點不是在直角坐標系中展…