LeetCode129周竞赛

本文深入探讨了四道编程难题的解决方案,包括数组的三等分、寻找可被K整除的最小整数、最佳观光组合的计算以及判断二进制字符串是否包含从1到N的所有数字。每道题目都提供了详细的思路分析和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.将数组分成和相等的三个部分

给定一个整数数组 A,只有我们可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。
形式上,如果我们可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] == A[i+1] + A[i+2] + … + A[j-1] == A[j] + A[j-1] + … + A[A.length - 1]) 就可以将数组三等分。

思路:
将数组A分为相等三部分,所以直接求数组和除以3,得到每个部分和

class Solution:
    def canThreePartsEqualSum(self, A: List[int]) -> bool:
        avg=sum(A)/3
        if int(avg)!=avg:
            print('false')
            return False
        else:
            num=0
            i=0
            j=0
            for m in range(len(A)):
                num=num+A[m]
                if num==avg:
                    i=m
                    num=0
                    break
            for m in range(i+1,len(A)):
                num=num+A[m]
                if num==avg:
                    j=m+1
                    num=0
                    break
            for m in range(j,len(A)):
                num=num+A[m]
            if num==avg and i<j-1:
                print('true')
                return True
            else:
                print('false')
                return False

2.可被K整除的最小整数

给定正整数 K,你需要找出可以被 K 整除的、仅包含数字 1 的最小正整数 N。返回 N 的长度。如果不存在这样的 N,就返回 -1。

class Solution:
    def smallestRepunitDivByK(self, K: int) -> int:
        N=1
        if K%2==0:
            print(-1)
            return -1
        if K%5==0:
            print(-1)
            return -1
        len=1
        while N%K!=0:
            len=len+1
            N=(N%K)*10+1
        print(len)
        return len
            

3.最佳观光组合

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。
一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。
返回一对观光景点能取得的最高分。

class Solution:
    def maxScoreSightseeingPair(self, A: List[int]) -> int:
        res=-1
        max_i=A[0]+0
        for j in range(1,len(A)):
            if res<(max_i+A[j]-j):
                res=max_i+A[j]-j
            if max_i<A[j]+j:
                max_i=A[j]+j
        return res
        
            

4.子串能表示从 1 到 N 数字的二进制串

给定一个二进制字符串 S(一个仅由若干 ‘0’ 和 ‘1’ 构成的字符串)和一个正整数 N,如果对于从 1 到 N 的每个整数 X,其二进制表示都是 S 的子串,就返回 true,否则返回 false。

class Solution:
    def queryString(self, S: str, N: int) -> bool:
        num=0
        for n in range(1,N+1):
            str1=str(bin(n))
            str1=str1[2:]
            print(str1)
            if str1 in S:
                num=num+1
        if num==N:
            return True
        else:
            return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃头嘤嘤魔

感谢厚爱

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

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

打赏作者

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

抵扣说明:

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

余额充值