爱用建站正规吗,手机版qq电脑登录网页入口,网站源码带数据,企业推广的成功在于他们发现Leetcode 3027. Find the Number of Ways to Place People II 1. 解题思路2. 代码实现 题目链接#xff1a;3027. Find the Number of Ways to Place People II
1. 解题思路
这一题的话我也没想到啥特别好的思路#xff0c;采用的纯粹是遍历剪枝的思路。
遍历的话好理解3027. Find the Number of Ways to Place People II
1. 解题思路
这一题的话我也没想到啥特别好的思路采用的纯粹是遍历剪枝的思路。
遍历的话好理解对于 N N N个位置当中要找到任意两个位置作为Takina和Chisato的位置一共就是 O ( N 2 ) O(N^2) O(N2)的算法复杂度然后就是要判断这两个位置是否合法这个至多又会引入 O ( N ) O(N) O(N)的算法复杂度一共可能就变成了 O ( N 3 ) O(N^3) O(N3)的算法复杂度明显太多了……
因此我们就是在这里做了一下剪枝首先的话就是我们将坐标拍了个序按照题意要求两个点一个要在左上角一个要在右下角因此我们将坐标按照 ( x , − y ) (x, -y) (x,−y)进行逆序排列此时必然左上角的点会出现右下角的点的前方且如果他们的区间当中有其他点的话这个点只能出现在他们之间。
此时我们发现提交的代码就能够通过所有测试样例了感觉应该还能够优化不过这里暂时就没往下深挖了凑合着就算是做出来了吧LOL
2. 代码实现
给出python代码实现如下
class Solution:def numberOfPairs(self, points: List[List[int]]) - int:points sorted(points, keylambda x: (x[0], -x[1]))n len(points)ans 0for i in range(n-1):a, b points[i]for j in range(i1, n):c, d points[j]if b d:continueelif any(a e c and d f b for e, f in points[i1:j]):continueans 1return ans提交代码评测得到耗时6105ms占用内存17MB。