难度简单48
给你一个整数数组 nums
,请你返回其中位数为 偶数 的数字的个数。
示例 1:
输入:nums = [12,345,2,6,7896] 输出:2 解释: 12 是 2 位数字(位数为偶数) 345 是 3 位数字(位数为奇数) 2 是 1 位数字(位数为奇数) 6 是 1 位数字 位数为奇数) 7896 是 4 位数字(位数为偶数) 因此只有 12 和 7896 是位数为偶数的数字
我的:
class Solution:
def findNumbers(self, nums: List[int]) -> int:
return len(nums) - sum([len(str(x))%2 for x in nums])
时间复杂度:O(N)
空间复杂度:O(1)
参考1:
class Solution:
def findNumbers(self, nums: List[int]) -> int:
return sum(1 for num in nums if len(str(num)) % 2 == 0)
参考2:(我们也可以使用语言内置的以 10
为底的对数函数 log10()
来得到整数 x
包含的数字个数。)
class Solution:
def findNumbers(self, nums: List[int]) -> int:
return sum(1 for num in nums if int(math.log10(num) + 1) % 2 == 0)
难度简单51
平面上有 n
个点,点的位置用整数坐标表示 points[i] = [xi, yi]
。请你计算访问所有这些点需要的最小时间(以秒为单位)。
你可以按照下面的规则在平面上移动:
- 每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。
- 必须按照数组中出现的顺序来访问这些点。
示例 1:
输入:points = [[1,1],[3,4],[-1,0]] 输出:7 解释:一条最佳的访问路径是: [1,1] -> [2,2] -> [3,3] -> [3,4] -> [2,3] -> [1,2] -> [0,1] -> [-1,0] 从 [1,1] 到 [3,4] 需要 3 秒 从 [3,4] 到 [-1,0] 需要 4 秒 一共需要 7 秒
我的:先计算斜着的距离,再加上横竖的距离
class Solution:
def minTimeToVisitAllPoints(self, points: List[List[int]]) -> int:
return sum(min(abs(points[i][0] - points[i+1][0]), abs(points[i][1] - points[i+1][1]))+
abs(abs(points[i][0] - points[i+1][0]) - abs(points[i][1] - points[i+1][1])) for i in range(len(points)-1))
官方:(切比雪夫距离)为啥我要用min加上横竖,直接用max就行了
class Solution:
def minTimeToVisitAllPoints(self, points: List[List[int]]) -> int:
x0, x1 = points[0]
ans = 0
for i in range(1, len(points)):
y0, y1 = points[i]
ans += max(abs(x0 - y0), abs(x1 - y1))
x0, x1 = points[i]
return ans