lc marathon 7.9

本文介绍了三种算法问题的解决方案:169.多数元素,通过摩尔投票法找出数组中的多数元素;242.有效的字母异位词,使用Python内置函数判断字符串是否为字母异位词;223.矩形面积,计算两个矩形的重叠面积。详细解析了算法思路和实现代码。
摘要由CSDN通过智能技术生成

169. 多数元素

摩尔投票法:

有一个对摩尔投票法非常形象的比喻:多方混战。

首先要知道,在任何数组中,出现次数大于该数组长度1/2的值最多只有1个。

我们把这道题比作一场多方混战,战斗结果一定只有最多1个阵营幸存,其他阵营被歼灭。数组中的数字即代表某士兵所在的阵营。

我们维护两个潜在幸存阵营A。我们遍历数组,如果遇到了属于A的士兵,则把士兵加入A或中,该队伍人数加一。继续遍历。

如果遇到了一个士兵既不属于A阵营

  1. A阵营还有活着的士兵,那么进行一次厮杀,参与厮杀的2个士兵全部阵亡

  2. A阵营已经没有士兵了。这个阵营暂时从地球上消失了。那么把当前遍历到的新士兵算作新的潜在幸存阵营,这个新阵营只有他一个人。继续遍历。

大战结束,最后A阵营就是初始人数最多的阵营

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        a=-999
        anum=0
        for num in nums:
            if num !=a:
                anum-=1
                if anum<=0:
                    a=num
                    anum=1
            else:
                anum+=1
        return a
242. 有效的字母异位词

直接用python现成的函数

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        sd=Counter(s)
        td=Counter(t)
        return sd.__eq__(td)
223. 矩形面积

记得判断是否有重叠部分! 对每条边判断

对整体判断会出错(eg:-3*-4=12)

class Solution:
    def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:

        x1=max(ax1,bx1)
        y1=max(ay1,by1)
        x2=min(ax2,bx2)
        y2=min(ay2,by2)
        print(x1,y1,x2,y2)
        return (ax2-ax1)*(ay2-ay1)-max(0,(x2-x1))*max(0,(y2-y1))+(bx2-bx1)*(by2-by1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值