拼接最大數

2021-10-11 02:54:46 字數 1447 閱讀 7625

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

class

solution

return res;}/*

假設選擇了2 + 3的情況,分別從兩個陣列取出相應元素個數的最大組合,對陣列一來說就是[6,5],對陣列二來說是[9,8,3];

n - i : 當前陣列中,當前下標到結尾還有多少個元素;

j : 當前陣列中i之前有多少個數加入到最大組合中;

n - i + j > k <=> n - i - 1 + j >= k : 當前下標的元素大於最大組合的末尾元素,就需要彈出,彈出後的元素減少,故j--,

n - i(陣列剩餘元素) - 1(去掉最大組合末尾元素) + j(最大組合中剩餘元素)時刻保持 >= k;

if j < k : 先將最大組合填滿再進行比較替換操作

*/private

int[

]maxarr

(int

nums,

int k)

return res;}/*

假設陣列一最大組合為[6,5],陣列二最大組合為[9,8,3],進行雙指標排序,排序後為[9,8,6,5,3]

*/private

int[

]merge

(int

nums1,

int[

] nums2,

int k)

/*比較兩陣列相應位置大小,相等就一直跳過,直到不相等就比較.

*/private

booleangt(

int[

] nums1,

int i,

int[

] nums2,

int j)

return j == nums2.length ||

(i < nums1.length && nums1[i]

> nums2[j]);

}}

拼接最大數

問題描述 給定長度分別為 m 和 n 的兩個陣列,其元素由 0 9 構成,表示兩個自然數各位上的數字。現在從這兩個陣列中選出 k k m n 個數字拼接成乙個新的數,要求從同乙個陣列中取出的數字保持其在原陣列中的相對順序。求滿足該條件的最大數。結果返回乙個表示該最大數的長度為 k 的陣列。說明 請盡...

321 拼接最大數

給定長度分別為m和n的兩個陣列,其元素由0 9構成,表示兩個自然數各位上的數字。現在從這兩個陣列中選出k k m n 個數字拼接成乙個新的數,要求從同乙個陣列中取出的數字保持其在原陣列中的相對順序。求滿足該條件的最大數。結果返回乙個表示該最大數的長度為k的陣列。說明 請盡可能地優化你演算法的時間和空...

321 拼接最大數

給定長度分別為 m 和 n 的兩個陣列,其元素由 0 9 構成,表示兩個自然數各位上的數字。現在從這兩個陣列中選出 k k m n 個數字拼接成乙個新的數,要求從同乙個陣列中取出的數字保持其在原陣列中的相對順序。求滿足該條件的最大數。結果返回乙個表示該最大數的長度為 k 的陣列。說明 請盡可能地優化...