Leetcode 447 Python中用get建立字典

今天在做leetcode简单题时,又被一道水题卡住了,疯狂TLE,然后就上网看思路,发现思路没问题啊,怎么回事呢?

上个题目链接:https://leetcode-cn.com/problems/number-of-boomerangs/description/

首先说一下思路,应该也是最纯的思路了,就是遍历i的点,在ide前提上再遍历到其他点的距离,统计距离相同(存在好多种距离)的点的数目(每个i分开统计),利用简单的排列组合可以得到n*(n-1)这个结果,再叠加起来就行。

先上我的代码:

#encoding=utf-8
import numpy as np


class Solution(object):
    def getAn(self, n):
        return n*(n-1)
    def dist(self, p1, p2):
        return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1])
    def numberOfBoomerangs(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        n = len(points)
        if n < 3:
            return 0
        Map = {}
        ans = 0
        for i in range(n):
            for j in range(n):
                if i == j:
                    continue
                dist = self.dist(points[i], points[j])
                if not dist in Map.keys():
                    Map[dist] = 1
                else:
                    Map[dist] += 1
            for val in Map.values():
                if val >= 2:
                    ans += val*(val-1)
            Map = {}
        return ans

成功超时。。。。我的代码里,在每个i里遍历到其他点的距离时,用字典Map存起来每种距离的个数,我建立字典的方式也是我一直以来用的,先看在不在keys里,没有就加。然后就TLE了。。。

看看用get创建字典的方式:

#encoding=utf-8
import numpy as np


class Solution(object):
    def getAn(self, n):
        return n*(n-1)
    def dist(self, p1, p2):
        return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1])
    def numberOfBoomerangs(self, points):
        """
        :type points: List[List[int]]
        :rtype: int
        """
        n = len(points)
        if n < 3:
            return 0
        ans = 0
        for i in range(n):
            for j in range(n):
                if i == j:
                    continue
                dist = self.dist(points[i], points[j])
                Map[dist] = Map.get(dist, 0) + 1
            for val in Map.values():
                if val > 2:
                    ans += val*(val-1)
            Map = {}
        return ans

get函数的意思是,如果能找到就返回结果,不能就返回默认值,这里我设置了0,没有就正好0+1等于1,然后,过了。。。。。。学到了,下次建立字典的方式要改了

猜你喜欢

转载自blog.csdn.net/ZouCharming/article/details/82193222