go语言每日3题
3019. 按键变更的次数
题目:
给你一个下标从 0 开始的字符串 s ,该字符串由用户输入。按键变更的定义是:使用与上次使用的按键不同的键。例如 s = "ab" 表示按键变更一次,而 s = "bBBb" 不存在按键变更。
返回用户输入过程中按键变更的次数。
注意:shift 或 caps lock 等修饰键不计入按键变更,也就是说,如果用户先输入字母 'a' 然后输入字母 'A' ,不算作按键变更。
示例 1:
输入:s = "aAbBcC"输出:2解释: 从 s[0] = 'a' 到 s[1] = 'A',不存在按键变更,因为不计入 caps lock 或 shift 。从 s[1] = 'A' 到 s[2] = 'b',按键变更。从 s[2] = 'b' 到 s[3] = 'B',不存在按键变更,因为不计入 caps lock 或 shift 。从 s[3] = 'B' 到 s[4] = 'c',按键变更。从 s[4] = 'c' 到 s[5] = 'C',不存在按键变更,因为不计入 caps lock 或 shift 。
示例 2:
输入:s = "AaAaAaaA"输出:0解释: 不存在按键变更,因为这个过程中只按下字母 'a' 和 'A' ,不需要进行按键变更。
提示:
- 1 <= s.length <= 100
- s 仅由英文大写字母和小写字母组成。
题解:
func countKeyChanges(s string) int {res := 0for i := 1; i<len(s); i++ {if strings.ToLower(string(s[i-1])) != strings.ToLower(string(s[i])) {res++}// strings.ToLower(string(s[i-1])) != strings.ToLower(string(s[i]))// strings.ToLower(string(s[i-1])) != strings.ToLower(string([s[i]]))}return res
}
2970. 统计移除递增子数组的数目 I
题目:
给你一个下标从 0 开始的 正 整数数组 nums 。
如果 nums 的一个子数组满足:移除这个子数组后剩余元素 严格递增 ,那么我们称这个子数组为 移除递增 子数组。比方说,[5, 3, 4, 6, 7] 中的 [3, 4] 是一个移除递增子数组,因为移除该子数组后,[5, 3, 4, 6, 7] 变为 [5, 6, 7] ,是严格递增的。
请你返回 nums 中 移除递增
注意 ,剩余元素为空的数组也视为是递增的。
子数组
示例 1:
输入:nums = [1,2,3,4]输出:10解释:10 个移除递增子数组分别为:[1], [2], [3], [4], [1,2], [2,3], [3,4], [1,2,3], [2,3,4] 和 [1,2,3,4]。移除任意一个子数组后,剩余元素都是递增的。注意,空数组不是移除递增子数组。
示例 2:
输入:nums = [6,5,7,8]输出:7解释:7 个移除递增子数组分别为:[5], [6], [5,7], [6,5], [5,7,8], [6,5,7] 和 [6,5,7,8] 。nums 中只有这 7 个移除递增子数组。
示例 3:
输入:nums = [8,7,6,6]输出:3解释:3 个移除递增子数组分别为:[8,7,6], [7,6,6] 和 [8,7,6,6] 。注意 [8,7] 不是移除递增子数组因为移除 [8,7] 后 nums 变为 [6,6] ,它不是严格递增的。
提示:
- 1 <= nums.length <= 50
- 1 <= nums[i] <= 50
题解:
func incremovableSubarrayCount(nums []int) int {n := len(nums)res := 0for i := 0; i<n; i++ {for j := i; j<n; j++ {if isIncrease(nums, i, j) {res++;}}}return res;
}func isIncrease(nums []int, l, r int) bool {for i :=1; i<len(nums); i++ {if i>=l && i <=r+1 {continue}if nums[i] <= nums[i-1] {return false}}if l-1>=0 && r+1<len(nums) && nums[r+1]<=nums[l-1] {return false}return true
}
2974. 最小数字游戏
题目:
你有一个下标从 0 开始、长度为 偶数 的整数数组 nums ,同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下:
- 每一轮,Alice 先从 nums 中移除一个 最小
- 接着,Bob 会将移除的元素添加到数组 arr 中,然后 Alice 也执行同样的操作。
- 游戏持续进行,直到 nums 变为空。
返回结果数组 arr 。
示例 1:
输入:nums = [5,4,2,3]输出:[3,2,5,4]解释:第一轮,Alice 先移除 2 ,然后 Bob 移除 3 。然后 Bob 先将 3 添加到 arr 中,接着 Alice 再将 2 添加到 arr 中。于是 arr = [3,2] 。第二轮开始时,nums = [5,4] 。Alice 先移除 4 ,然后 Bob 移除 5 。接着他们都将元素添加到 arr 中,arr 变为 [3,2,5,4] 。
示例 2:
输入:nums = [2,5]输出:[5,2]解释:第一轮,Alice 先移除 2 ,然后 Bob 移除 5 。然后 Bob 先将 5 添加到 arr 中,接着 Alice 再将 2 添加到 arr 中。于是 arr = [5,2] 。
提示:
- 1 <= nums.length <= 100
- 1 <= nums[i] <= 100
- nums.length % 2 == 0
题解:
func numberGame(nums []int) []int {sort.Ints(nums)for i :=0;i<len(nums); i+=2 {nums[i], nums[i + 1] = nums[i + 1], nums[i]}return nums}