力扣每日一题_2022_01
344. 反转字符串
字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。
不要给另外的数组分配额外的空间,你必须修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"] 输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 10<sup>5</sup>
s[i]
都是 码表中的可打印字符
Solution
func reverseString(s []byte) { left := 0 right := len(s)-1 for left < right { s[left],s[right] = s[right],s[left] left++ right-- } }
334. 递增的三元子序列
贪心算法 #数组
给你一个整数数组 nums
,判断这个数组中是否存在长度为 3
的递增子序列。
如果存在这样的三元组下标 (i, j, k)
且满足 i < j < k
,使得 nums[i] < nums[j] < nums[k]
,返回 true
;否则,返回 false
。
示例 1:
输入:nums = [1,2,3,4,5] 输出:true 解释:任何 i < j < k 的三元组都满足题意
示例 2:
输入:nums = [5,4,3,2,1] 输出:false 解释:不存在满足题意的三元组
示例 3:
输入:nums = [2,1,5,0,4,6] 输出:true 解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6
提示:
1 <= nums.length <= 5 * 10<sup>5</sup>
-2<sup>31</sup> <= nums[i] <= 2<sup>31</sup> - 1
进阶:你能实现时间复杂度为 O(n)
,空间复杂度为 O(1)
的解决方案吗?
Solution
#贪心算法
func increasingTriplet(nums []int) bool { small,mid := math.MaxInt32,math.MaxInt32 for _,num := range nums { if num <= small { small = num } else if num <= mid { mid = num } else { return true } } return false }
70. 爬楼梯
Difficulty: **假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 **
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1\. 1 阶 + 1 阶 2\. 2 阶
示例 2:
输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1\. 1 阶 + 1 阶 + 1 阶 2\. 1 阶 + 2 阶 3\. 2 阶 + 1 阶
Solution
#动态规划
func climbStairs(n int) int { if n <= 2 { return n } pre1,pre2 := 2,1 for i := 2; i < n; i++ { cur := pre1 + pre2 pre2 = pre1 pre1 = cur } return pre1 }
53. 最大子数组和
给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1] 输出:1
示例 3:
输入:nums = [5,4,-1,7,8] 输出:23
提示:
1 <= nums.length <= 10<sup>5</sup>
-10<sup>4</sup> <= nums[i] <= 10<sup>4</sup>
进阶:如果你已经实现复杂度为 O(n)
的解法,尝试使用更为精妙的 分治法 求解。
Solution
#动态规划
func maxSubArray(nums []int) int { sum := nums[0] for i := 1; i < len(nums); i++ { if nums[i] + nums[i-1] > nums[i] { nums[i] += nums[i-1] } if nums[i] > sum { sum = num[i] } } return sum }
747. 至少是其他数字两倍的最大数
给你一个整数数组 nums
,其中总是存在 唯一的 一个最大整数 。
请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1
。
示例 1:
输入:nums = [3,6,1,0] 输出:1 解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。
示例 2:
输入:nums = [1,2,3,4] 输出:-1 解释:4 没有超过 3 的两倍大,所以返回 -1 。
示例 3:
输入:nums = [1] 输出:0 解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。
提示:
1 <= nums.length <= 50
0 <= nums[i] <= 100
nums
中的最大元素是唯一的
Solution
func dominantIndex(nums []int) int { m1, m2 := -1,-1 index := -1 for i,num := range nums { if num > m1 { m2 = m1 m1 = num index = i } else if num > m2 { m2 = num } } if m1 >= m2 * 2 { return index } else { return -1 } }
1220. 统计元音字母序列的数目
给你一个整数 n
,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n
的字符串:
- 字符串中的每个字符都应当是小写元音字母(
'a'
,'e'
,'i'
,'o'
,'u'
) - 每个元音
'a'
后面都只能跟着'e'
- 每个元音
'e'
后面只能跟着'a'
或者是'i'
- 每个元音
'i'
后面 不能 再跟着另一个'i'
- 每个元音
'o'
后面只能跟着'i'
或者是'u'
- 每个元音
'u'
后面只能跟着'a'
由于答案可能会很大,所以请你返回 模 10^9 + 7
之后的结果。
示例 1:
输入:n = 1 输出:5 解释:所有可能的字符串分别是:"a", "e", "i" , "o" 和 "u"。
示例 2:
输入:n = 2 输出:10 解释:所有可能的字符串分别是:"ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" 和 "ua"。
示例 3:
输入:n = 5 输出:68
提示:
1 <= n <= 2 * 10^4
Solution
以a
为例,当a作为尾巴时,及ea、ia、ua
,所以是
总的就是:
#DFA
const MOD int = 1e9 + 7 func countVowelPermutation(n int) int { a,e,i,o,u := 1,1,1,1,1 for k := 2; k <= n; k++ { a,e,i,o,u = (e+i+u)%MOD,(a+i)%MOD,(e+o)%MOD,i,(i+o)%MOD } return (a+e+i+o+u) % MOD }
class Solution { public: int countVowelPermutation(int n) { const int M = 1e9 + 7; long a = 1, e = 1, i = 1, o = 1, u = 1; for (int k = 2; k <= n; k++) { long aa = (e+i+u) % M; long ee = (a+i) % M; long ii = (e+o) % M; long oo = i; long uu = (o+i) % M; a = aa; e = ee; i = ii; o = oo; u = uu; } return (a+e+i+o+u) % M; } };
本文来自博客园,作者:StimuMing,转载请注明原文链接:https://www.cnblogs.com/fole-del/p/15812532.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步