随笔分类 - 算法
摘要:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 链接: leetcode. 解题思路: 首先用暴力的深度优先搜索,然后发现对部分测试用例会超时,所以需要对搜索进行剪枝。一般的剪枝手段都
阅读全文
摘要:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。 链接: leetcode. 解题思路:先对数组进行排序,身高为逆序,对于身高相同的元素,大于等于自己的人数为顺序。身高越大的元素
阅读全文
摘要:树状排列问题 链接: leetcode. 解题思路:动态规划,利用两个哈希表,一个表示偷当前节点,另一个表示不透当前节点的最大收益。状态转移,偷当前节点的状态,由两个子节点的不偷状态加上当前节点值组成,不偷当前节点的状态,由不偷或者偷子节点的最大值转化过来。 /** * Definition for
阅读全文
摘要:有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的
阅读全文
摘要:无限次买卖 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 链接: leetcode. 解题思路:一次遍历,手里先握着一
阅读全文
摘要:给定一个无序的整数数组,找到其中最长上升子序列的长度。 输入: [10,9,2,5,3,7,101,18] 输出: 4 纯DP 解体思路:利用动态规划的方法,从一个方向遍历数组,每次获取以该位置为子序列结尾的长度。状态表示,利用数组f分别表示以该位结尾的最长上升子序列;状态转移,像前遍历,如果前者比
阅读全文
摘要:设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 解题思路: 根据二叉树的遍历思想,只要将空节点的表示符号写入字符串,就能根据二叉树的某种遍历,构造出唯一的树。这里通过二叉
阅读全文
摘要:在未排序的数组中找到第 k 个最大的元素。 链接: leetcode. 解题思路:通过快速排序的思想方法,每次随机获取指定范围内一个树的排序位置,然后根据这个位置,再重新指定范围,直到这个位置索引满足K。 class Solution { public int findKthLargest(int[
阅读全文
摘要:实现一个 Trie (前缀树),包含 插入, 查询, 和 查询前缀这三个操作。 Trie trie = new Trie(); trie.insert(“apple”); trie.search(“apple”); // 返回 true trie.search(“app”); // 返回 false
阅读全文
摘要:你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1] 给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习? 2, [[1,
阅读全文
摘要:给定一个乱序的链表,要求将链表进行排序后然后返回头结点,要求时间复杂度为 O(nlogn)。 leetcode 由于无法快速得到链表中某一节点得值,时间复杂度为 O(nlogn),所以,通过归并排序。归并的核心思想是将数据分为两段有序的数据,再进行合并。归并的程序设计上可以由递归和迭代两种方法,迭代
阅读全文
摘要:普通链表的节点由节点值和指向下一个节点的指针组成。双向链表顾名思义,节点中多一个指针可以指向前一个节点。 优点:可以得到前节点,这样在只有当前节点的情况下,可以删除本节点。 构造思想:链表中存在一个头节点和一个尾节点,向头添加节点的时候,将被添加的节点下一个指针指向头节点的下一个节点,然后只需要把头
阅读全文
摘要:给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 输入: s = “applepenapple”, wordDict = [“apple”, “
阅读全文
摘要:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k
阅读全文

浙公网安备 33010602011771号