Leetcode每日刷题【中】--Day 23

进入考试月,这就作为最后一篇了。等7月考完再持续记录!冲!每天还是有完成每日一题的

第 53 场双周赛记录(前三题)

长度为三且各字符不同的子字符串

很简单的一道题,利用三个指针,一次多一个单位,同步向右逐个遍历。满足都不相等就记录一次。

class Solution:
    def countGoodSubstrings(self, s: str) -> int:
        a, b, c = 0, 1, 2
        count = 0
        for _ in range(len(s)-2):
            if s[a]!=s[b] and s[b]!= s[c] and s[c] != s[a]:
                count += 1
            a += 1
            b += 1
            c += 1     
        return count

数组中最大数对和的最小值

思路:说了那么多啥都不懂,只有看例子才能知道是啥。先求出尽可能小的数对,然后每个数对求和取到数对中的最大值。有点贪心的思想,这里也用到双指针。简单的从小到大(或者从大到小)排序之后就可以利用两个指针,首先最小的加最大的,然后一次向中间移动指针再求和,返回最大值。

class Solution:
    def minPairSum(self, nums: List[int]) -> int:
        nums.sort()
        left = 0
        right = len(nums)-1
        newlist = []
        while left < right:
            newlist.append((nums[left], nums[right]))
            left += 1
            right -= 1
        sumlist = [a+b for a,b in newlist]
        return max(sumlist)
5757. 矩阵中最大的三个菱形和

先看这道题的数据量,矩阵范围尽然很小,是接受枚举的题了。那就开始吧。

class Solution:
    def getBiggestThree(self, grid: List[List[int]]) -> List[int]:
        m, n = len(grid), len(grid[0])
        containL = set()
        for i in range(m):
            for j in range(n):
                containL.add(grid[i][j])  # 添加中心
                # 找出离中心尽可能长同时保证四向不越界的距离
                distance = min(i, j, m-i-1, n-j-1)
                
                # 加上四个角,四个角的距离逐渐增大
                for length in range(1, distance+1):
                    cur = 0
                    cur += grid[i-length][j]
                    cur += grid[i+length][j]
                    cur += grid[i][j+length]
                    cur += grid[i][j-length]
                    # 在当前的距离之下,进行四条边的求和
                    for k in range(1, length):
                        cur += grid[i-length+k][j-k]  # 左上边 从上到下
                        cur += grid[i+length-k][j-k]  # 左下边 从下到上
                        cur += grid[i-length+k][j+k]  # 右上边 从上到下
                        cur += grid[i+length-k][j+k]  # 右下边 从下到上
                    containL.add(cur)    
        containL = list(containL)
        containL.sort()            
        return containL[-1:-4:-1]

        

注:模仿自枚举法


每日一题

231. 2 的幂

看过这道题,只需要查看一下2进制中,2的幂次方是什么样的就好了

# 先看看是什么样字的
a = 1
for _ in range(100):
    print(bin(a))
    a *= 2
# 会发现都是只有最大位数为1,其他为0
# 这就简单了,只要把a-1,那就相当于所有位都取反。两者一交,如果是2的幂次方,结果就是0
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n <= 0:  # 当然首要满足是正数
            return False 
        return not (n & (n-1))   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JamePrin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值