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