letecode 程式設計學習(21)

2021-10-11 06:02:33 字數 1492 閱讀 2667

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

單個序列取k個最大的序列可以利用棧的思想,棧頂小於當前的元素就出棧,直到棧頂元素大於當前元素就把當前元素入棧。

class solution 

int m = nums1.size() - k;

if (k == 0)

for (int i = 0; i < nums1.size(); i++)

out.push_back(nums1[i]);

} return std::vector(out.begin(), out.begin() + k); }

bool bcombigger(const std::vector&sq1, const std::vector&sq2)

else if (sq1[i] < sq2[i])

}if (sq1.size() < sq2.size())

return false;

} bool bcombiggerorg(const std::vector&sq1, const std::vector&sq2)

else if (sq1.size() > sq2.size())

for (int i = 0; i < sq1.size(); i++)

else if (sq1[i] < sq2[i])

}return false;

} vectormerge(const vector& nums1, const vector& nums2)

else if (nums1[i] < nums2[j])

else

else

}} while (i < nums1.size())

while (j < nums2.size())

return out;

} vectormaxnumber(vector& nums1, vector& nums2, int k)

} return out;

}};

letecode 程式設計學習(4)

題目 給定乙個整數陣列和乙個區間,計算有多少連續子陣列的和在區間範圍內 例如 陣列 3,0,5,2,2 區間為 1,3 則輸出的子陣列有 3 2,2 3,0 3,0,5,2,2 這5種,輸出為5。include include include include includestruct treeno...

letecode 程式設計學習(7)

題目奇偶鍊錶 給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 ...

letecode 程式設計學習(12)

題目 在一條環路上有 n 個加油站,其中第 i 個加油站有汽油 gas i 公升。你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i 1 個加油站需要消耗汽油 cost i 公升。你從其中的乙個加油站出發,開始時油箱為空。如果你可以繞環路行駛一周,則返回出發時加油站的編號,否則返回 1。說明...