一、存在连续三个奇数的数组
给你一个整数数组 arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
。
class Solution:
def threeConsecutiveOdds(self, arr: List[int]) -> bool:
l=len(arr)
for i in range(1,l-1):
if arr[i-1]%2==1 and arr[i]%2==1 and arr[i+1]%2==1:
return True
return False
二、使数组中所有元素相等的最小操作数
存在一个长度为 n
的数组 arr
,其中 arr[i] = (2 * i) + 1 ( 0 <= i < n
。
一次操作中,你可以选出两个下标,记作 x
和 y
( 0 <= x, y < n )并使 arr[x] 减去 1 、arr[y] 加上 1 (即 arr[x] -=1 且 arr[y] += 1 )。最终的目标是使数组中的所有元素都 相等 。题目测试用例将会 保证 :在执行若干步操作后,数组中的所有元素最终可以全部相等。
给你一个整数 n
,即数组的长度。请你返回使数组 arr
中所有元素相等所需的 最小操作数
。
class Solution:
def minOperations(self, n: int) -> int:
table=[0,1,2]
for i in range(3,n):
table.append(i+table[i-2])
return table[n-1]
三、两球之间的磁力
在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n
个空的篮子,第 i
个篮子的位置在 position[i]
,Morty 想把 m
个球放到这些篮子里,使得任意两球间 最小磁力 最大。
已知两个球如果分别位于 x
和 y
,那么它们之间的磁力为 |x - y|
。
给你一个整数数组 position
和一个整数 m
,请你返回最大化的最小磁力。
class Solution:
def maxDistance(self, p: List[int], m: int) -> int:
p.sort()
lenp=len(p)
l=min([p[i+1]-p[i] for i in range(lenp-1)]) #最小答案
r=p[-1]-p[0] #最大答案
def check(ans):
count,i,j=0,0,0
while j<lenp:
while j<lenp and p[j]-p[i]<ans: j+=1
if j<lenp: count+=1
i=j
return count>= m-1
while l<=r:
mid=(l+r)//2
if check(mid): l=mid+1
else: r=mid-1
return l-1
# 有些不懂,以后再看看
四、吃掉 N 个橘子的最少天数
厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:
吃掉一个橘子。
如果剩余橘子数 n
能被 2
整除,那么你可以吃掉 n/2
个橘子。
如果剩余橘子数 n
能被 3
整除,那么你可以吃掉 2*(n/3)
个橘子。
每天你只能从以上 3
种方案中选择一种方案。
请你返回吃掉所有 n
个橘子的最少天数。
class Solution:
def minDays(self, n: int) -> int:
from functools import lru_cache
@lru_cache(maxsize=2048)
def bfs(k):
if k<=2: return k
else:
if k%6==0:
return min(bfs(k//3)+1,bfs(k//2)+1)
else:
if k%3==0:
return min(bfs(k//3)+1,bfs(k-1)+1)
if k%2==0:
return min(bfs(k//2)+1,bfs(k-1)+1)
return bfs(k-1)+1
return bfs(n)
# 第一次把第四题做出来,开心ing
# 看了一下其它题解,n-1的情况后期不用考虑