LC.P831[隐藏个人信息]
LC.P831[隐藏个人信息]
题目描述给你一条个人信息字符串 s ,可能表示一个 邮箱地址 ,也可能表示一串 电话号码 。返回按如下规则 隐藏 个人信息后的结果:
电子邮件地址:
一个电子邮件地址由以下部分组成:
一个 名字 ,由大小写英文字母组成,后面跟着
一个 '@' 字符,后面跟着
一个 域名 ,由大小写英文字母和一个位于中间的 '.' 字符组成。'.' 不会是域名的第一个或者最后一个字符。
要想隐藏电子邮件地址中的个人信息:
名字 和 域名 部分的大写英文字母应当转换成小写英文字母。
名字 中间的字母(即,除第一个和最后一个字母外)必须用 5 个"*****"替换。
电话号码:
一个电话号码应当按下述格式组成:
电话号码可以由 10-13 位数字组成
后 10 位构成 本地号码
前面剩下的 0-3 位,构成 国家代码
利用 {'+', '-', '(', ')', ' '} 这些 分隔字符 按某种形式 ...
LC.P292[Nim游戏]
LC.P292[Nim游戏]
题目描述你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。你们轮流进行自己的回合, 你作为先手 。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。
示例 1:
输入:n = 4输出:false解释:以下是可能的结果:
移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。
移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。在所有结果中,你的朋友是赢家。
示例 2:
输入:n = 1输出:true
示例 3:
输入:n = 2输出:true
提示:
1 <= n <= 2^31 - 1
方法一:博弈论12345class Solution { public boolean canWinNim(int n) ...
LC.P464[我能赢吗]
LC.P464[我能赢吗]
题目描述在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过 100 的玩家,即为胜者。
如果我们将游戏规则改为 “玩家 不能 重复使用整数” 呢?
例如,两个玩家可以轮流从公共整数池中抽取从 1 到 15 的整数(不放回),直到累计整数和 >= 100。
给定两个整数 maxChoosableInteger (整数池中可选择的最大数)和 desiredTotal(累计和),若先出手的玩家能稳赢则返回 true ,否则返回 false 。假设两位玩家游戏时都表现 最佳 。
示例 1:
输入:maxChoosableInteger = 10, desiredTotal = 11输出:false解释:无论第一个玩家选择哪个整数,他都会失败。第一个玩家可以选择从 1 到 10 的整数。如果第一个玩家选择 1,那么第二个玩家只能选择从 2 到 10 的整数。第二个玩家可以通过选择整数 10(那么累积和为 11 >= desiredTotal ...
LC.P2367[算数三元组的数目]
LC.P2367[算数三元组的数目]
题目描述给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件,则三元组 (i, j, k) 就是一个 算术三元组 :
i < j < k,
nums[j] - nums[i] == diff 且
nums[k] - nums[j] == diff
返回不同 算术三元组 的数目。
示例 1:
输入:nums = [0,1,4,6,7,10], diff = 3输出:2解释:(1, 2, 4) 是算术三元组:7 - 4 == 3 且 4 - 1 == 3 。(2, 4, 5) 是算术三元组:10 - 7 == 3 且 7 - 4 == 3 。
示例 2:
输入:nums = [4,5,6,7,8,9], diff = 2输出:2解释:(0, 2, 4) 是算术三元组:8 - 6 == 2 且 6 - 4 == 2 。(1, ...
LC.P587[安装栅栏]
安装栅栏
题目描述给定一个数组 trees,其中 trees[i] = [xi, yi] 表示树在花园中的位置。
你被要求用最短长度的绳子把整个花园围起来,因为绳子很贵。只有把 所有的树都围起来,花园才围得很好。
返回恰好位于围栏周边的树木的坐标。
示例 1:
输入: points = [[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]]输出: [[1,1],[2,0],[3,3],[2,4],[4,2]]
示例 2:
输入: points = [[1,2],[2,2],[4,2]]输出: [[4,2],[2,2],[1,2]]
注意:
1 <= points.length <= 3000
points[i].length == 2
0 <= xi, yi <= 100
所有给定的点都是 唯一 的。
方法一:二维凸包(Andrew算法)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484 ...
LC.P1673[两点之间不包含任何点的最宽垂直区域]
LC.P1673[两点之间不包含任何点的最宽垂直区域]
题目描述给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直区域 的宽度。
垂直区域 的定义是固定宽度,而 y 轴上无限延伸的一块区域(也就是高度为无穷大)。 最宽垂直区域 为宽度最大的一个垂直区域。
请注意,垂直区域 边上 的点 不在 区域内。
示例 1:
输入:points = [[8,7],[9,9],[7,4],[9,7]]输出:1
示例 2:
输入:points = [[3,1],[9,0],[1,0],[1,4],[5,3],[8,8]]输出:3
提示:
n == points.length
2 <= n <= 105
points[i].length == 2
0 <= xi, yi <= 109
方法一:排序将输入的坐标按照横坐标排序,然后依次求出所有相邻点的横坐标距离,返回最大值。
12345678910class Solution { public int ...
LC.P593[有效的正方形]
LC.P593[有效的正方形]
题目描述给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true 。
点的坐标 pi 表示为 [xi, yi] 。 输入没有任何顺序 。
一个 有效的正方形 有四条等边和四个等角(90度角)。
示例 1:
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]输出: True
示例 2:
输入:p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]输出:false
示例 3:
输入:p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]输出:true
提示:
p1.length == p2.length == p3.length == p4.length == 2
-104 <= xi, yi <= 104
方法一:数学任取四个点中的三 ...
LC.P1037[有效的回旋镖]
LC.P1037[有效的回旋镖]
题目描述给定一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点,如果这些点构成一个 回旋镖 则返回 true 。
回旋镖 定义为一组三个点,这些点 各不相同 且 不在一条直线上 。
示例 1:
输入:points = [[1,1],[2,3],[3,2]]输出:true
示例 2:
输入:points = [[1,1],[2,2],[3,3]]输出:false
提示:
points.length == 3
points[i].length == 2
0 <= xi, yi <= 100
方法一:数学若三点共线,则任意组成的两个向量叉乘为0。
即若A,B,C三点共线,则向量ABX向量BC = 0。
12345678class Solution { public boolean isBoomerang(int[][] points) { // AB X BC = 0 int[] AB = new i ...
LC.P1641[统计字典序元音字符串的数目]
LC.P1641[统计字典序元音字符串的数目]
题目描述给你一个整数 n,请返回长度为n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。
字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。
示例 1:
输入:n = 1输出:5解释:仅由元音组成的 5 个字典序字符串为 [“a”,”e”,”i”,”o”,”u”]
示例 2:
输入:n = 2输出:15解释:仅由元音组成的 15 个字典序字符串为[“aa”,”ae”,”ai”,”ao”,”au”,”ee”,”ei”,”eo”,”eu”,”ii”,”io”,”iu”,”oo”,”ou”,”uu”]注意,”ea” 不是符合题意的字符串,因为 ‘e’ 在字母表中的位置比 ‘a’ 靠后
示例 3:
输入:n = 33输出:66045
提示:
1 <= n <= 50
方法一:记忆化搜索12345678910111213141516171819202122class Sol ...
LC.P442[数组中重复的数据]
LC.P442[数组中重复的数据]
题目描述给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。
你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。
示例1
输入:nums = [4,3,2,7,8,2,3,1]输出:[2,3]
示例 2:
输入:nums = [1,1,2]输出:[1]
示例 3:
输入:nums = [1]输出:[]
提示:
n == nums.length
1 <= n <= 105
1 <= nums[i] <= n
nums 中的每个元素出现 一次 或 两次
方法一:哈希表1234567891011121314class Solution { public List<Integer> findDuplicates(int[] nums) { Set<Integer> s ...