算法与刷题
水凝霜艾米
这个作者很懒,什么都没留下…
展开
-
红黑树的插入过程(手动画图)
手动画的红黑树的插入过程原创 2020-04-29 15:53:12 · 310 阅读 · 0 评论 -
LeetCode 70. 爬楼梯 C++
class Solution {public: // 动态规划解法--递归 vector<int> dp;// 用来记录已经计算过的结果,避免重复计算 int climbStairs(int n) { // 当dp为空时,申请空间(仅需要做一次该操作) if (dp.empty()) dp.resize(n+1); ...原创 2020-04-19 15:29:38 · 128 阅读 · 0 评论 -
LeetCode 297. 二叉树的序列化与反序列化 C++
详细思路在注释里1. 通过序列化,可以只使用先序遍历就可以唯一确定一颗二叉树。2. 序列化时:空节点用"#,"表示,非空节点用其节点的val值加逗号表示。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *r...原创 2020-04-18 21:44:52 · 197 阅读 · 0 评论 -
LeetCode 98. 验证二叉搜索树 C++
LeetCode 98. 验证二叉搜索树 C++思路:自顶向下遍历:每一个节点有一个对应的区间class Solution {public: bool isValidBST(TreeNode* root) { return dfs(root, INT_MIN, INT_MAX); } bool dfs(TreeNode* root, long lo...原创 2020-04-17 22:23:49 · 203 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历 C++
LeetCode 94. 二叉树的中序遍历 C++方法:1.迭代2.递归详细思路见注释class Solution {public: // 思路: // 1. 将整棵树的最左边一条链压入栈中 // 2. 每次取出栈顶元素,如果它有右子树,则将右子树压入栈中 vector<int> inorderTraversal(TreeNode* root...原创 2020-04-17 22:20:49 · 138 阅读 · 0 评论 -
LeetCode101.对称二叉树 C++
LeetCode101.对称二叉树 C++实现方法:1.递归2.迭代详细思路在代码注释中class Solution {public: /* // 递归写法思路: // 1.两个根节点的值要相等 // 2.左边的左子树和右边的右子树对称 // 3.左边的右子树和右边的左子树对称 bool isSymmetric(TreeNode* roo...原创 2020-04-17 22:16:44 · 141 阅读 · 0 评论 -
LeetCode395. 至少有K个重复字符的最长子串 C++
/* * 分治递归 */class Solution {public: // 1.统计每个字符出现的次数 // 2.找到第一个出现次数小于k的字符,下标为i // 3.处理该字符左边的字符串 // 4.在下标i后面找到第一个出现次数大于k的字符 //(思想:最长的子串一定不包含出现次数小于k的字符) int longestSubstring(...原创 2020-04-11 18:11:01 · 281 阅读 · 0 评论 -
LeetCode169题-多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2本题难度为中等。要寻找一个数组中出现次数超过数组长度一半的元素,我首先想到的就是逐一遍历,计算每个数组中每个数字出现的次...原创 2020-02-17 22:21:19 · 435 阅读 · 0 评论 -
Leetcode79题:单词拆分(中等难度)
题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回...原创 2020-02-14 14:30:20 · 110 阅读 · 0 评论 -
Leetcode208题:实现一个前缀树(Trie)
题目描述实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“ap...原创 2020-02-14 11:08:46 · 207 阅读 · 0 评论 -
Leetcode139题--单词拆分
Leetcode139题–单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为...原创 2020-02-13 13:48:49 · 101 阅读 · 0 评论 -
剑指offer 面试题9-用两个栈实现队列
用两个栈实现队列数据结构特点栈:先进后出队列:先进先出定义两个栈:stack1和stack2stack1:用来在队列尾部添加节点。stack2:用来在队列头部删除节点。观察下图:上图中最左边序号为1的两个栈:在stack1中依次压入a,b,c三个节点,此时stack2为空。上图中最左边序号为2的两个栈:此时若需要在队列头部删除节点,需要将stack1中的节点依次弹出并按照弹...原创 2019-09-26 11:10:54 · 113 阅读 · 0 评论 -
LeetCode 198题 打家劫舍
c++代码利用动态规划思想先计算出dp[0] dp[1] 即偷或不偷前两个房子的最大偷窃金额然后每次迭代选择:max(dp[i-1], dp[i-2] + nums[i]);//核心代码class Solution {public:int max(int a, int b){ return a>b ? a : b;}int rob(vector<int&g...原创 2019-08-10 15:53:18 · 153 阅读 · 0 评论 -
leetcode26题
Leetcode第26题虽然是一道简单的题,但自己还是没有想出来怎么做。问题核心:原地删除数组中重复的元素(所给数组已排序)解决方法:时间复杂度和空间复杂度都要求很低 在数组当中设置两个指针i和j,运行的时候,一个指针移动较快,一个移动较慢。 i初始只想nums的第一个元素,j初始指向nums的第二个元素,然后开始遍历。 当nums[j] != nums[i]的时候,将nums[j]复...原创 2019-03-29 08:01:19 · 334 阅读 · 0 评论 -
堆
数据结构之堆不是完整的讲解堆,只是写一些自己在学习的过程中感觉需要注意的几个点(参考书籍《啊哈算法》)堆的概念堆是一种特殊的完全二叉树首先说下满二叉树和完全二叉树满二叉树:每个内部节点都有两个儿子结点;完全二叉树:除了最后一层,其余层的结点数都到达了最大值,最后一层从右向左连续缺若干结点;(也可以理解为:如果一个结点有右结点,那么一定也有左结点)最大堆:父结点都比子结点大。最小堆...原创 2019-03-10 19:59:18 · 164 阅读 · 0 评论 -
leetcode 189题旋转数组
我使用python语言写的,主要有两种方法。1.先将整个数组反转,在分别反转前k个和后k个,思路很简单。2.第2种方法是利用python中对list的一些操作,将list分片后再重新组合两种方法的代码如下:注释中也谢了思路class Solution(object): def rotate_1(self, nums, k): """ :type...原创 2019-04-07 09:25:54 · 109 阅读 · 0 评论 -
leetcode121题
121题和122题类似,但121题是只能买卖一次股票代码如下:class Solution(object): def maxProfit(self, prices): “”" :type prices: List[int] :rtype: int “”" if (prices == None) or len(price...原创 2019-03-30 22:17:08 · 279 阅读 · 0 评论