Russian doll nesting problem, this is a typical dp problem... Forced traversal will prompt a timeout, but I haven't figured out how to fix it for a long time. I searched online and attributed the problem to the longest increment. Subsequence problem... However, I am stupid and still can't figure out why this can be done... Although the result is correct...
First sort the data and use python's built-in sorting function to sort. However, when x is equal, y needs to be sorted from large to small, so a cmp must be passed in. python3.x does not support cmp. So I used a conversion to convert it into key. If the key is directly set to x, the default y will be shot from small to large
The result of this calculation is correct, but the iterated dp is not a valid sequence...but the length is correct...
<span style="color: #0000ff">class</span><span style="color: #000000"> Solution: </span><span style="color: #008000">#</span><span style="color: #008000"> @param {int[][]} envelopes a number of envelopes with widths and heights</span> <span style="color: #008000">#</span><span style="color: #008000"> @return {int} the maximum number of envelopes</span> <span style="color: #0000ff">def</span><span style="color: #000000"> maxEnvelopes(self, envelopes): </span><span style="color: #008000">#</span><span style="color: #008000"> Write your code here</span> <span style="color: #0000ff">import</span><span style="color: #000000"> functools nums </span>= sorted(envelopes,key= functools.cmp_to_key(<span style="color: #0000ff">lambda</span> x,y:x[0]-y[0] <span style="color: #0000ff">if</span> x[0] != y[0] <span style="color: #0000ff">else</span> y[1] - x[1<span style="color: #000000">])) size </span>=<span style="color: #000000"> len(nums) dp </span>=<span style="color: #000000"> [] </span><span style="color: #0000ff">for</span> x <span style="color: #0000ff">in</span><span style="color: #000000"> range(size): low, high </span>= 0, len(dp) - 1 <span style="color: #0000ff">while</span> low <=<span style="color: #000000"> high: mid </span>= (low + high)//2 <span style="color: #0000ff">if</span> dp[mid][1] < nums[x][1<span style="color: #000000">]: low </span>= mid + 1 <span style="color: #0000ff">else</span><span style="color: #000000">: high </span>= mid - 1 <span style="color: #0000ff">if</span> low <<span style="color: #000000"> len(dp): dp[low] </span>=<span style="color: #000000"> nums[x] </span><span style="color: #0000ff">else</span><span style="color: #000000">: dp.append(nums[x]) </span><span style="color: #0000ff">return</span> len(dp)
The above is the detailed content of lintcode question record 4. For more information, please follow other related articles on the PHP Chinese website!