654
题目描述:
给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:
二叉树的根是数组 nums 中的最大元素。
左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。
右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。
返回有给定数组 nums 构建的 最大二叉树 。
示例:
解答:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
if not nums:
return None
root=TreeNode(max(nums))
root.left=self.constructMaximumBinaryTree(nums[:nums.index(max(nums))])
root.right=self.constructMaximumBinaryTree(nums[nums.index(max(nums))+1:])
return root
1551
题目描述:
存在一个长度为 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:
sum=0
if n%2==0:
for i in range(1,n,2):
sum+=i
else:
for i in range(2,n,2):
sum+=i
return sum
1572
题目描述:
给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。
请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。
示例:
解答:
class Solution:
def diagonalSum(self, mat: List[List[int]]) -> int:
sum=0
n=len(mat)
for i in range(n):
sum=sum+mat[i][i]+mat[i][n-i-1]
if n%2==1:
sum-=mat[n//2][n//2]
return sum
1588
题目描述:
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
子数组 定义为原数组中的一个连续子序列。
请你返回 arr 中 所有奇数长度子数组的和 。
示例:
解答:
class Solution:
def sumOddLengthSubarrays(self, arr: List[int]) -> int:
'''
第一层循环是步长
第二层循环len(arr)-n+1的来历是:i+n<len(arr)+1,推导出来的
'''
ans=0
for n in range(1,len(arr)+1,2):
for i in range(len(arr)-n+1):
ans+=sum(arr[i:i+n])
return ans
面试题08.09
题目描述:
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。
说明:解集不能包含重复的子集。
示例:
解答:
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n<0: return []
if n==0: return ['']
res=set()
for s in self.generateParenthesis(n-1):
for i in range(2*n-1):
if s[:i]+'()'+s[i:] in res:continue
res.add(s[:i]+'()'+s[i:])
return list(res)