將兩個陣列合併為乙個陣列,然後將陣列的值存入結構體裡,儲存該值的原位置。
按值的大小進行降序排序,從大到小取值。
下面**的做法是每次遍歷一遍結構體陣列,
選取符合條件的點進入最終的答案陣列。
這麼做的確能解決問題,因為絕對貪心,保證了每次入隊點的數值盡可能的大。
但很明顯,有很多冗餘的操作,
比如某乙個元素被使用過後應該出隊,當然這是很好優化的。
但還有個問題是有些元素雖然它們的值很大,但它的位置太過靠後了,
導致這個值不能立刻放入答案陣列,且每次迴圈都得將他們檢索一遍。
這裡給出優化方案:如果檢索到這個數特別大,但無法立刻放入,
顯然我們總會將這個值放入答案陣列後面的某個位置。
所以我們可以設定乙個臨時的結構體陣列來存放這個值,
並對陣列剩餘可使用的總元素個數進行減少,
如果後面還有元素出現這種情況,就將那個值插入到臨時結構體陣列裡面。
一旦遍歷到臨時結構體陣列首元素的原位置時,就可以將兩陣列合併,
並繼續進行操作。
顯然這麼做的時間複雜度符合題目要求。
class
solution
;static
bool
cmp(node a, node b)
vector<
int>
maxnumber
(vector<
int>
&nums1, vector<
int>
&nums2,
int k)
for(
int i =
0; i < m; i++
)sort
(all, all + m + n, cmp)
;int now1 =0;
//[0,n-1]
int now2 =0;
//[0,m-1]
int st =0;
while
(st != n +1)
if(all[i]
.vec ==
2&& all[i]
.pos >= now2 && m - all[i]
.pos + n - now1 >= k - st)}}
return ans;}}
;
學習了標程的單調棧資料結構後,我開始寫這段**。
其中遇到了許許多多的問題,以及很多意外的發現。
單調棧的剩餘元素思想和我上面的改進想法有類似的地方,
邊界處理需要很細心。
比較函式應該很簡單,當我看到標程的比較函式裡帶了兩個下標,我有點疑惑。
不是比較兩個長度為k的陣列,為啥還要記錄這個東西?
後來我發現它是在合併排序裡用到了,
是用來比較兩個合併陣列目前的大小。
當然可以直接貪心的去合併(我就是這麼去做的)
但當左右兩陣列頭元素相同時,必須要比較後面幾位元素。
class
solution
if(top < k -1)
else
}return stack;
}//判單nums1是不是比nums2小
public
boolean
compare
(int
nums1,
int[
] nums2,
int n)
if(nums2[i]
return
false;}
public
int[
]merge
(int
nums1,
int[
] nums2)
if(n2==0)
int[
] output=
newint
[n1+n2]
;int st1=0;
int st2=0;
int pos=0;
while
(pos!=n1+n2)
else
if(st1==n1)
else
if(nums1[st1]
==nums2[st2]
)else
if(st2+t==n2)
else
if(nums1[st1+t]
>nums2[st2+t]
)else
if(nums1[st1+t]
)else
break;}
}else
if(nums1[st1]
>nums2[st2]
)else
}return output;
}public
int[
]maxnumber
(int
nums1,
int[
] nums2,
int k)
}return ans;
}}
LeetCode321 拼接最大數
給定長度分別為 m 和 n 的兩個陣列,其元素由 0 9 構成,表示兩個自然數各位上的數字。現在從這兩個陣列中選出 k k m n 個數字拼接成乙個新的數,要求從同乙個陣列中取出的數字保持其在原陣列中的相對順序。求滿足該條件的最大數。結果返回乙個表示該最大數的長度為 k 的陣列。說明 請盡可能地優化...
leetcode321 拼接最大數
給定長度分別為 m 和 n 的兩個陣列,其元素由 0 9 構成,表示兩個自然數各位上的數字。現在從這兩個陣列中選出 k k m n 個數字拼接成乙個新的數,要求從同乙個陣列中取出的數字保持其在原陣列中的相對順序。求滿足該條件的最大數。結果返回乙個表示該最大數的長度為 k 的陣列。說明 請盡可能地優化...
leetcode 321 拼接最大數
目錄 一 題目內容 二 解題思路 三 給定長度分別為 m 和 n 的兩個陣列,其元素由 0 9 構成,表示兩個自然數各位上的數字。現在從這兩個陣列中選出 k k m n 個數字拼接成乙個新的數,要求從同乙個陣列中取出的數字保持其在原陣列中的相對順序。求滿足該條件的最大數。結果返回乙個表示該最大數的長...