// 堆排 func heapSort(nums []int) { n := len(nums) if n < 2 { return } lastParent := (n - 2) / 2 for i := lastParent; i >= 0; i-- { pushDown(nums, i, n) ...
SnowKagura‘s blog
直面生活,热爱生活这个题目总共能买卖两次,且必须要先卖掉第一次才能买第二次的,所以可以从左往右扫描获得 [0, i] 的最大盈利,从右往左扫描 [i, n-1] 的最大盈利...
这道题,我们需要先通过把单词录入哈希表。然后构造一个可达性DP,dp[i] 代表了 s[0..i] 是否能拆分成 wordsDict 中的单词,再通过可达性 DP 构造一个 prevs 数组记录从某个位置 j 能够构造出的多个单词起点 i 的关系图。最后通过回溯 DFS,从尾部开始向前搜索 prevs 数组,一直遍历到头,得到的 path 一定是一个涵盖 wordsDict 单词的句子,并且...
这道题如果普通手段,其实就是通过另外一个数组来实现,但是如果要原地完成就比较难想到了。其实可以通过三次翻转法,也就是先对整个数组翻转,然后翻转前 k 个,...
这题,要么先频次统计然后小顶堆,要么频次统计后分桶,同样频次的数字放一个桶,小顶堆的时间复杂度会高一点,所以不如分桶,空间换时间。func topKFrequent(nums []int, k int) []int { n := len(nums) cnts := map[int]int{} for _, v := range nums { cnts[...