算法
两天宇宙人
摸鱼大学僧
展开
-
打家劫舍
class Solution { public: int rob(vector<int>& nums) { if(!nums.size()) return 0; vector<int> v(nums.size()); for(int i = 0; i < v.size(); ++i...原创 2019-10-23 17:29:48 · 104 阅读 · 0 评论 -
爬楼梯
典型的动态规划题目: 具有:最优子结构和无后效性。 class Solution { public: int climbStairs(int n) { if(n == 1 || n == 2) return n; vector<int> v(n + 1, 0); v[1] = 1; v[2] = 2; ...原创 2019-10-21 10:58:22 · 136 阅读 · 0 评论 -
完全平方数
????Leetcode题目链接 第一种方法:BFS 对于这个题目我的第一个想法就是BFS,将数值像洋葱一样一层一层的向外延展,每一层count+1,当出现队列中有等于n的值时,返回count即可。 但是直接这样做要超出时间要求,于是加了一个unordered_set来记录已经放入过队列的值,避免重复,最后勉强过关。 class Solution { public: void a(vect...原创 2019-10-17 13:41:05 · 232 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历 二叉树的遍历分为以下几种: - 层次遍历 - 前序遍历 - 中序遍历 - 后序遍历 其中分为两类:层次遍历单作为一类,其他三种方式为另外一类。 先总结前中后序这三种方法,如果有朋友恰好看到我的文章来找思路,我建议先别看代码的实现,人看了别人的代码自然而然地会有先入为主的感觉,说的不好听一点,叫背别人的代码,这是下意识地行为,所以还是一开始先别看为好。不知道我...原创 2019-08-04 22:03:07 · 127 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树 进入来看我这篇文章的小伙伴应该大都是遇见了leetcode中的105. 从前序与中序遍历序列构造二叉树或是106. 从中序与后序遍历序列构造二叉树,其实这两个题是明显的同意思路,如果一个题目没有思路,可以看看别人的解答,然后把另外一个当作练习,这也是极好的。 原理讲解 这两个题目的思路其实是和之前遍历二叉树的思路是一样的:分而治之。 在这样一...原创 2019-08-05 00:53:18 · 390 阅读 · 0 评论 -
填充每个节点的下一个右侧节点指针
填充每个节点的下一个右侧节点指针 116. 填充每个节点的下一个右侧节点指针和117. 填充每个节点的下一个右侧节点指针 II这两个题目唯一的区别在于是否是完美二叉树。 这个题目的思路完全来源于层次遍历,如果掌握了层次遍历,这两个题目的答案都是一样的。 源代码: /* // Definition for a Node. class Node { public: int va...原创 2019-08-05 02:04:16 · 141 阅读 · 0 评论 -
归并排序
概述 归并排序的特点在于它的时间复杂度为O(nlogn)。而根据一个结论性的东西来说:最坏情况下比较方式的排序算法至少需要Ω(nlogn)的时间(结论来自邓俊辉版数据结构P59),这是比较性排序算法的极限。 计算时间复杂度 (函数代码在下面) 不难看出merge函数的时间复杂度是O(n), sort函数的时间复杂度主要来源于merge函数和两个自身的递归函数,于是: T(n) = 2 ...原创 2019-08-13 17:59:47 · 131 阅读 · 0 评论 -
栈混洗
这里使用的是O(n)的算法: 思路:再来一次栈混洗,看能不能实现序列B中的效果。(设A为输入栈,B为要验证的栈) 先将要验证的栈B转移到栈rb,这样B的栈底就位于rb的栈顶了,让我们可以知道依次放入栈B的元素是哪些。 模拟混洗的过程,如果rb栈顶与s中一样,那么就将rb和s都pop。 如果s为空,则表示能实现栈B这样一个结果。 #pragma once #include <stack&...原创 2019-08-23 17:48:53 · 1017 阅读 · 0 评论