赞
踩
相关链接可点击:
目录
给你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 。
请返回距离你当前位置 曼哈顿距离 最近的 有效 点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标 最小 的一个。如果没有有效点,请返回 -1 。
两个点 (x1, y1) 和 (x2, y2) 之间的 曼哈顿距离 为 abs(x1 - x2) + abs(y1 - y2) 。
示例 1:
输入:x = 3, y = 4, points = [[1,2],[3,1],[2,4],[2,3],[4,4]]
输出:2
解释:所有点中,[3,1],[2,4] 和 [4,4] 是有效点。有效点中,[2,4] 和 [4,4] 距离你当前位置的曼哈顿距离最小,都为 1 。[2,4] 的下标最小,所以返回 2 。
示例 2:
输入:x = 3, y = 4, points = [[3,4]]
输出:0
提示:答案可以与你当前所在位置坐标相同。
示例 3:
输入:x = 3, y = 4, points = [[2,3]]
输出:-1
解释:没有有效点。
提示:
题意:
有效点:一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 ;
曼哈顿距离:两个点 (x1, y1) 和 (x2, y2) 之间的 曼哈顿距离 为 abs(x1 - x2) + abs(y1 - y2);
返回:最近的 有效 点的下标(下标从 0 开始),如果有多个最近的有效点,请返回下标 最小 的一个。否则,返回 -1.
因此,思路为:
- 求出有效点
- 求出每个有效点与当前位置(即题目中所给出的(x, y)的曼哈顿距离
- 返回曼哈顿距离最小的点的下标
- class Solution:
- def nearestValidPoint(self, x: int, y: int, points) -> int:
- import sys
- """
- :param x: int
- :param y: int
- :param points: List[List[int]]
- :return: int
- """
- min_dist = sys.maxsize # 最小曼哈顿距离
- ans = sys.maxsize
- for index in range(len(points)):
- if points[index][0] == x or points[index][1] == y:
- dist = abs(points[index][1] - y) + abs(points[index][0] - x)
- if dist < min_dist:
- min_dist = dist
- ans = index
- return -1 if ans == sys.maxsize else ans
-
- if __name__ == '__main__':
- x = 3
- y = 4
- points = [[1, 2], [3, 1], [2, 4], [2, 3], [4, 4]]
- # x = 3
- # y = 4
- # points = [[2, 3]]
- # x = 5
- # y = 1
- # points = [[1, 1], [6, 2], [1, 5], [3, 1]]
- s = Solution()
- ans = s.nearestValidPoint(x, y, points)
- print(ans)
给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。
对于一个整数 y ,如果存在整数 x 满足 ,我们称这个整数 y 是三的幂。
示例 1:
输入:n = 12
输出:true
解释:
示例 2:
输入:n = 91
输出:true
解释:
示例 3:
输入:n = 21
输出:false
提示:
题意:
对于一个整数 n,如果其可以由 多项式 ,其中,为 0 或 1。
若满足,则返回 True, 否则,返回 False。
思路:
因为题中给出 ,因此 指数幂 最大不超过14。
因此,数组 martix 长度为15,初始化为:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],下标表示指数幂。
例如:整数12
因此令 martix[1] = 1, martix[2] = 1,即转换成三进制。
若转换后的数组 martix 中的数字只有0 和 1,返回True,否则,返回 False.
- import math
- class Solution:
- def checkPowersOfThree1(self, n: int) -> bool:
- martix = [0 for _ in range(15)]
- while n != 0:
- x = int(math.log(n, 3)) # 指数
- martix[x] += 1
- n -= pow(3, x)
- return max(martix) <= 1
-
- if __name__ == '__main__':
- # n = 12
- # n = 91
- n = 21
- s = Solution()
- ans = s.checkPowersOfThree(n)
- print(ans)
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。
比方说,"abaacc" 的美丽值为 3 - 1 = 2 。
给你一个字符串 s ,请你返回它所有子字符串的 美丽值 之和。
示例 1:
输入:s = "aabcb"
输出:5
解释:美丽值不为零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] ,每一个字符串的美丽值都为 1 。
示例 2:
输入:s = "aabcbaa"
输出:17
提示:
题意:
美丽值:出现频率最高字符与出现频率最低字符的出现次数之差。
返回:该字符串中的所有子字符串的美丽值之和。
思路:
- 求出当前字符串的所有子字符串
- 求出每个子字符串的美丽值
- 返回所有美丽值之和
在这里运用了一个小技巧,如果单纯的暴力的去求每个子字符串的美丽值很容易超时。
例如:字符串 “aabcb”
每一次只需在上一次的基础上添加新的字符即可。
- class Solution:
- # 返回每个子字符串的美丽值
- def single_beauty_num(self, left, right):
- if left != right:
- if self.s[right] not in self.martix:
- self.martix[self.s[right]] = 1
- else:
- self.martix[self.s[right]] += 1
- self.maxnum = max(self.martix.values())
- self.minnum = min(self.martix.values())
- # print(self.maxnum, self.minnum)
- return self.maxnum - self.minnum
-
- def beautySum(self, s: str) -> int:
- ans = 0 # 美丽值总和
- self.s = s
- for i in range(len(self.s)):
- self.martix = dict() # dict记录子字符串各个字符出现的次数
- self.martix[self.s[i]] = 1
- for j in range(1, len(self.s) - i + 1):
- ans += self.single_beauty_num(i, i + j - 1)
- return ans
-
- if __name__ == '__main__':
- s = "aabcb"
- obj = Solution()
- ans = obj.beautySum(s)
- print(ans)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。