給定長度分別為 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 的陣列。說明 請盡可能地優化...