这道题,我们需要先通过把单词录入哈希表。然后构造一个可达性DP,dp[i] 代表了 s[0..i] 是否能拆分成 wordsDict 中的单词,再通过可达性 DP 构造一个 prevs 数组记录从某个位置 j 能够构造出的多个单词起点 i 的关系图。最后通过回溯 DFS,从尾部开始向前搜索 prevs 数组,一直遍历到头,得到的 path 一定是一个涵盖 wordsDict 单词的句子,并且...
Articles in the category of 编程技术杂谈与总结
- Home
- 编程技术杂谈与总结
这道题如果普通手段,其实就是通过另外一个数组来实现,但是如果要原地完成就比较难想到了。其实可以通过三次翻转法,也就是先对整个数组翻转,然后翻转前 k 个,...
这题,要么先频次统计然后小顶堆,要么频次统计后分桶,同样频次的数字放一个桶,小顶堆的时间复杂度会高一点,所以不如分桶,空间换时间。func topKFrequent(nums []int, k int) []int { n := len(nums) cnts := map[int]int{} for _, v := range nums { cnts[...
这道题要分割出两个数组,平均值需要相等,那其实就相当于分出一个有k个元素的数组的平均值和整体数组的平均值相等就可以满足了,也就是 $target / k ...
这道题跟 构建回文串检测 的思路很像,因为都是统计字符个数,然后看构造回文串的条件。因为是构造最长的回文串,所以思路略微有点不同,碰到字符频次为奇数的需要加上其频次 - 1 的长度,然后有奇数频次的字符,则可以在中间再加上一个字符。func longestPalindrome(s string) int { cnt := map[byte]int{} for i := ran...