目录
345. 反转字符串中的元音字母 Reverse Vowels Of A String 🌟
347. 前 K 个高频元素 Top-k Frequent Elements 🌟🌟
🌟 每日一练刷题专栏 🌟
Rust每日一练 专栏
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
345. 反转字符串中的元音字母 Reverse Vowels Of A String
给你一个字符串 s
,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'
、'e'
、'i'
、'o'
、'u'
,且可能以大小写两种形式出现。
示例 1:
输入:s = "hello" 输出:"holle"
示例 2:
输入:s = "leetcode" 输出:"leotcede"
提示:
1 <= s.length <= 3 * 10^5
s
由 可打印的 ASCII 字符组成
代码1: 双指针交换
package mainimport ("fmt""strings"
)func reverseVowels(s string) string {vowels := "aeiouAEIOU"// 将字符串转换为 byte 数组,方便交换字母str := []byte(s)left, right := 0, len(str)-1for left < right {// 左指针找到第一个元音字母for left < right && !strings.ContainsAny(vowels, string(str[left])) {left++}// 右指针找到第一个元音字母for left < right && !strings.ContainsAny(vowels, string(str[right])) {right--}// 交换左指针和右指针指向的字母str[left], str[right] = str[right], str[left]left++right--}return string(str)
}func main() {fmt.Println(reverseVowels("hello"))fmt.Println(reverseVowels("leetcode"))
}
代码2: 递归法
package mainimport ("fmt""strings"
)func reverseVowels(s string) string {vowels := "aeiouAEIOU"str := []byte(s)reverse(str, 0, len(s)-1, vowels)return string(str)
}func reverse(str []byte, left, right int, vowels string) {if left >= right {return}for left < right && !strings.ContainsAny(vowels, string(str[left])) {left++}for left < right && !strings.ContainsAny(vowels, string(str[right])) {right--}str[left], str[right] = str[right], str[left]reverse(str, left+1, right-1, vowels)
}func main() {fmt.Println(reverseVowels("hello"))fmt.Println(reverseVowels("leetcode"))
}
代码3: 栈(stack)
package mainimport ("fmt""strings"
)func reverseVowels(s string) string {vowels := "aeiouAEIOU"stack := []byte{}for _, char := range s {if strings.ContainsAny(vowels, string(char)) {stack = append(stack, byte(char))}}result := []byte(s)for i, char := range s {if strings.ContainsAny(vowels, string(char)) {result[i] = stack[len(stack)-1]stack = stack[:len(stack)-1]}}return string(result)
}func main() {fmt.Println(reverseVowels("hello"))fmt.Println(reverseVowels("leetcode"))
}
输出:
holle
leotcede
347. 前 K 个高频元素 Top-k Frequent Elements
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]
示例 2:
输入: nums = [1], k = 1 输出: [1]
提示:
1 <= nums.length <= 10^5
k
的取值范围是[1, 数组中不相同的元素的个数]
- 题目数据保证答案唯一,换句话说,数组中前
k
个高频元素的集合是唯一的
进阶:你所设计算法的时间复杂度 必须 优于 O(n log n)
,其中 n
是数组大小。
代码: 桶排序
package mainimport "fmt"func topKFrequent(nums []int, k int) []int {count := make(map[int]int)for _, num := range nums {count[num]++}buckets := make([][]int, len(nums)+1)for num, freq := range count {buckets[freq] = append(buckets[freq], num)}result := make([]int, 0)for i := len(nums); i >= 0 && len(result) < k; i-- {result = append(result, buckets[i]...)}return result[:k]
}func main() {fmt.Println(topKFrequent([]int{1, 1, 1, 2, 2, 3}, 2))fmt.Println(topKFrequent([]int{1}, 1))
}
输出:
[1 2]
[1]
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Rust每日一练 专栏(2023.5.16~)更新中... | |
Golang每日一练 专栏(2023.3.11~)更新中... | |
Python每日一练 专栏(2023.2.18~2023.5.18)暂停更 | |
C/C++每日一练 专栏(2023.2.18~2023.5.18)暂停更 | |
Java每日一练 专栏(2023.3.11~2023.5.18)暂停更 |