lintcode question record 4

PHP中文网
Release: 2017-06-20 09:35:14
Original
1407 people have browsed it

Russian Doll Envelopes

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)
Copy after login

The above is the detailed content of lintcode question record 4. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template