384. 打乱数组
Fisher–Yates shuffle - Wikipedia
1 | class Solution { |
Fisher–Yates shuffle - Wikipedia
1 | class Solution { |
对于一个字符串中计数长度<k的字符,他必定为分界,反之,当一个字符串中没有计数<k的字符,他就一定是符合条件的子串。
1 | class Solution { |
以上的方法调用的递归次数较多,实际上一个分割字符可以把字符串分成好多串。就可以减少递归调用的次数
1 | class Solution { |
对于每种子串的字符数进行枚举,如果当前字符数大于这个值,就移动左边界
维护一个less变量表示当前子串中还有几个个数未达到k。
1 | class Solution { |
同剑指 Offer 65. 不用加减乘除做加法 - 力扣(LeetCode) (leetcode-cn.com)
1 | class Solution { |
1 | class Solution { |
回头看
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
在int范围内,3的幂的最大数是1162261467,且1162261467的所有约数都是3的幂,且包含所有情况,所以只需要判断n是不是1162261467的约束就可以
1 | class Solution { |
T(n): O(nlogn)
S(n): O(n)
1 | class Solution { |
T(n) : O(n)
S(n): O(n)
nth_element进行自己的实现
1 | class Solution { |
关于nth_element的时间复杂度分析
假设k次迭代终止,假设迭代平衡
T(n) = T(n / 2) + n = T(n / 4) + n / 2 + n...
当迭代次数趋于无穷的时候
T(n) = n
1 | class Solution { |
最坏情况下,pt也需要同时遍历一遍nums
考虑到题目中说元素的顺序可以改变,所以针对这一个条件进行优化
1 | class Solution { |
review
1 | class Solution { |
1 | class Solution { |
1 | /** |
更好看一些
1 | /** |
1 | class Solution { |