刷题笔记
海洋之心。
视频编码学习
展开
-
一些字符串函数:append,to_string,stoi
1 appendappend是比push_back更方便的在字符串后增加字符串的方式,类似字符串的+。这是string的成员函数。差异:append只能增加字符串,push_back只能增加字符。 string s1 = "hello"; //s1 = "hello" string s2 = "world"; //s2 = "world" string s3 = s1 + s2; //s...原创 2020-02-19 09:55:20 · 472 阅读 · 0 评论 -
从暴力递归到动态规划
本博来自左神视频,特此做下笔记。文章目录1 换钱的方法数1.1 暴力递归1.2 动态规划1.2.1 第一次优化,加个备忘录1.3 修改代码的方式:从递归到dp1.3.1 第一次优化,加个备忘录3 附录:“换钱的方法数”整体手撸代码1 换钱的方法数【题目】给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱...原创 2020-02-09 10:36:21 · 339 阅读 · 0 评论 -
数据结构学习:堆与priority_queue
堆的例题初步学习大顶堆和小顶堆的实现除了用vector实现,可以直接用STL中的priority_queue容器。便于理解的代码如下:#include<iostream>#include<algorithm>#include<queue>#include<functional>using namespace std;int mai...原创 2020-01-05 22:17:31 · 184 阅读 · 0 评论 -
一些常用函数:memset、memcpy、strlen、strcpy
memset一般用作初始化函数。作用是将某一块内存中的内容全部设置为某一值。格式:起始指针、设定的初始值、长度memset(buffer,0,sizeof(int)*10);//在buffer处初始化10个0memcpy用于从源内存地址的起始位置开始拷贝若干个字节到目标内存地址。格式:返回指针,源指针、长度memcpy(dst, src, strlen(src)+1);strlen...原创 2020-01-05 20:52:55 · 922 阅读 · 0 评论 -
Leetcode学习:五大算法之回溯算法
文章目录1 简介1.1 介绍1.2 算法核心2 解答模板3 例题3.1 全排列问题3.2 N皇后问题3.3 解数独问题1 简介1.1 介绍百度百科给出的定义如下:回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回...原创 2019-12-22 16:57:34 · 195 阅读 · 0 评论 -
排序算法总结
文章目录1 综述1.1 稳定性1.2 复杂度2 具体排序算法2.1 冒泡排序2.2 插入排序2.3 选择排序2.4 进化的冒泡排序:增加终止条件2.5 进化的插入排序:希尔排序2.6 进化的选择排序:堆排序3 参考代码1 综述1.1 稳定性比如A和B的数值相同,但未排序的时候A在B的前面,此时进行排序:若排序后A依然在B前,则为稳定排序;若排序后B跑到了A前,则为不稳定排序;只要有一组...原创 2019-12-18 20:55:22 · 244 阅读 · 0 评论 -
常见图算法思想
文章目录1 最小生成树1.1 普里姆算法(Prim)1.2 克鲁斯卡尔算法(Kruskal)2 最短路径2.1 迪杰斯特拉算法(Dijkstra)2.2 弗洛伊德算法(Floyd)1 最小生成树生成树:图有n个结点,用n-1条边连接起来。最小生成树:代价最小的生成树。1.1 普里姆算法(Prim)点扩展:有一个集合和其他节点。刚开始,起点在这个集合中,找到到这个集合的最短距离的节点,将...原创 2019-12-07 14:05:38 · 386 阅读 · 0 评论 -
查找算法进阶:利用树的查找(二叉排序树、AVL树、多路查找树、B树)
1 二叉搜索树2 ALV树3 例题原创 2019-11-03 20:22:01 · 265 阅读 · 0 评论 -
最大堆和最小堆思想的应用——数据流中的中位数问题
1 概念最大堆:堆顶的key是堆里所有关键字中最大者;最小堆:堆顶的key是堆里所有关键字中最小者;堆是一棵完全二叉树,树中结点的值总是不大于(即最小堆)或者不小于(即最大堆)其孩子结点的值,所以每一个结点的子树也是一个堆。根据最大堆和最小堆的思想,我们可以实现标准库容器:优先队列。2 中位数可使用的堆思想中位数:若奇数,则是中间位置的数字;若偶数,则是中间两个数字的平均值。因此,整...原创 2019-10-30 21:46:07 · 403 阅读 · 2 评论 -
常用的排序算法:归并排序(逆序数问题)
快速排序是最常用最常考到的排序方式,但不够稳定。今天我们来学习一种新的、稳定的排序方法:归并排序。文章目录1 归并排序2 代码实现3 复杂度分析4 可应对的题:逆序数1 归并排序1、假设一个序列有n个数字:那么我们将它看成n个子序列,每个子序列有一个数字;2、此时,我们进行两两归并,得到n/2个长度为2的序列(也可能是(n-1)/2个长度为2和1个长度为1的序列);3、继续两两归并,递...原创 2019-10-17 21:59:15 · 493 阅读 · 0 评论 -
LeetCode 836 矩形重叠 (Rectangle Overlap)& 223 矩形面积(Rectangle Area)
class Solution {public: bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) { int A = rec1[0]; int B = rec1[1]; int C = rec1[2]; int ...原创 2018-11-30 22:17:36 · 323 阅读 · 0 评论 -
Leetcode 141 环形链表 (Linked List Cycle)—— 链表的操作、快慢指针法
刷LeetCode有小半年了,终于有勇气踏出了舒适区,不再在数组,数字,字符串,双指针上游荡了,有关这部分简单的内容和常用操作可见C++学习1:vector部分容器操作及部分泛型算法,如今开始畅游数据结构的天地中了!这道第一次尝试的链表题中,发现了很多问题,本题解题思路如下:若链表成环,且是尾部成环,则每个节点的next是唯一的且不为NULL。因此可以使用两个指针:一个跑得快的指针fast和一...原创 2019-03-22 21:19:25 · 436 阅读 · 0 评论 -
LeetCode:runtime error: member access within null pointer of type 'struct ListNode'错误
LeetCode链表题中很有可能运行时看到这样一句报错:源代码报错位置如下:其实解决办法特别特别简单,原因是没有判断当前指针是否指向了一个有意义的位置。我们只需要增加令其有意义的判断条件即可,即指针是否为NULL:...原创 2019-03-28 21:31:15 · 27315 阅读 · 7 评论 -
二叉树基础:各种遍历、深度
1 深度优先遍历110.平衡二叉树,可以套用深度优先遍历dfs模板,得到树的深度,进而进行判断class Solution {public: bool flag; int dfs(TreeNode* p)//得到子树的深度 { if(p == NULL) return 0; int l = dfs(p->lef...原创 2019-04-24 22:12:43 · 877 阅读 · 0 评论 -
Leetcode学习:五大算法之动态规划算法
1 概述先给出维基百科的概述:动态规划常常适用于有重叠子问题和最优子结构性质的问题。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表综上:动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间。2 适用情况1、最优子结构性质。如果问题的最优解所包含的子问题的解...原创 2019-07-17 16:00:41 · 455 阅读 · 0 评论 -
面试笔试中最最最常考到的算法——快速排序(Partition函数)
忙里偷闲,突然对排序算法产生了兴趣,只会冒泡排序和选择排序这两种本科学到的排序方法的我,来探索一波新世界!希望从此告别O(n²)。文章目录1、原理2、实现划分分治递归终止条件3、复杂度分析时间复杂度空间复杂度4、代码1、原理通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,...原创 2019-10-04 22:02:47 · 1220 阅读 · 0 评论 -
计算机底层的二进制表达——正负数与二进制转换方法及代码
以下均是以64位计算机为例,故int类型是4字节,即32位二进制数。文章目录1 十进制数转为二进制1.1 正数的二进制1.2 负数的二进制2 正负数与原码、反码、补码2.1 原码2.2 反码2.3 补码2.4 总结3 转换代码3.1 五种位操作简介3.2 十进制转二进制代码1 十进制数转为二进制先放出结论:计算机运算中5和-5的二进制分别为:十进制的 5 转换为二进制:00000000 0...原创 2019-10-05 20:03:39 · 3539 阅读 · 2 评论 -
了解i++和++i的区别与推荐使用版本
文章目录1 区别2 C++中两者的源码3 推荐使用`++i`4 示例代码1 区别首先用一个图给出最佳理解++i是先处理完加法,再做其它运算, i++是处理完相关运算(执行完一条语句后)后自加。1、 i++ 返回原来的值,++i 返回加1后的值。2、 i++ 不能作为左值,而++i 可以。必须要指出的是:在程序开发中,++i和i++基本没有任何区别,可相互替换。但考虑深层,依然有一个...原创 2019-10-06 11:21:28 · 451 阅读 · 0 评论 -
LeetCode 830 较大分组的位置(Positions of Large Groups)
class Solution {public: vector<vector<int>> largeGroupPositions(string S) { int i = 1,j; vector<vector<int>> two; for(; i < S.size()-1;...原创 2018-11-22 21:55:11 · 102 阅读 · 0 评论 -
LeetCode 349 两个数组的交集(Intersection of Two Arrays)
class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> all; for(int i = 0; i < nums1.size(); i++...原创 2018-11-26 22:26:37 · 110 阅读 · 0 评论 -
LeetCode 268 缺失数字(Missing Number)
class Solution {public: int missingNumber(vector<int>& nums) { int n = nums.size(); vector<int> a (n+1,0); if(n == 1) { if (nums[0] == ...原创 2018-11-26 21:43:18 · 121 阅读 · 0 评论 -
LeetCode 50 Pow(x, n) —— 可分治问题用递归降低复杂度
起初拿到这个问题,感觉这丝毫不像是中等难度题,一个循环即可解决问题。大键盘一挥写出如下代码:class Solution {public: double myPow(double x, int n) { double sum; int t; if(n<0) t=-n; else ...原创 2018-11-18 14:58:28 · 485 阅读 · 0 评论 -
LeetCode 7 反转整数 (Reverse Integer) —— 得到整形数的位数及尾数
这里使用一种较笨的方法,适合初学者理解。主要的过程就是用取余操作得到最后一位,用除法操作得到一共有几位。具体程序如下:// An highlighted blockclass Solution {public: int reverse(int x) { //取相反数 int n = 0; long sum = 0; i...原创 2018-11-18 14:49:09 · 478 阅读 · 0 评论 -
LeetCode 27 移除元素 (Remove Element) —— 不得新建数组时,两个下标处理原数组
使用两个下标即可解决。class Solution {public: int removeElement(vector&lt;int&gt;&amp; nums, int val) { int ret = 0; for(int i = 0 ;i&lt;nums.size() ;i++) { if(nums[i]!=...原创 2018-11-18 16:50:02 · 112 阅读 · 0 评论 -
LeetCode 9 回文数 (Palindrome Number) & LeetCode 258 各位相加(Add Digits)—— 得到整形数的位数及尾数
这里使用一种较笨的方法,适合初学者理解。主要的过程就是用取余操作得到最后一位,用除法操作得到一共有几位。具体程序如下:class Solution {public: bool isPalindrome(int x) { if(x&lt;0) return false; int n = 0; ...原创 2018-11-18 16:38:22 · 116 阅读 · 0 评论 -
LeetCode 18 四数之和 (4sum) & 118 杨辉三角(Pascal's Triangle)—— 关于二维动态数组的初始化
vector&amp;amp;lt;int&amp;amp;gt; s(4,0); vector&amp;amp;lt;vector&amp;amp;lt;int&amp;amp;gt;&amp;amp;gt; result;原创 2018-11-18 14:29:11 · 137 阅读 · 0 评论 -
LeetCode 896 单调数列(Monotonic sequence)
class Solution {public: bool isMonotonic(vector<int>& A) { if(A.size()==1) return true; int i = 0; if(A[0]>A[1]) { if...原创 2018-11-22 20:39:03 · 240 阅读 · 0 评论 -
LeetCode 867 转置矩阵 (Transpose Matrix)——固定大小二维数组的初始化方法
m列n行的矩阵可用此方法初始化class Solution {public: vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; transpose(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; A) { int m = A.s原创 2018-11-19 22:02:28 · 154 阅读 · 0 评论 -
LeetCode 121 买卖股票的最佳时机(Best Time to Buy and Sell Stocks)
这里提出一种一种好想但复杂度较高的方法:两层循环遍历整个利润值,不断更新最大利润即可。代码如下class Solution {public: int maxProfit(vector<int>& prices) { int max=0; int flag_buy=0; int flag_sold=0; ...原创 2018-11-21 22:01:44 · 113 阅读 · 0 评论 -
LeetCode 125 验证回文串(Valid Palindrome)& LeetCode 344 反转字符串(Reverse String)——逆序操作
class Solution {public: bool isPalindrome(string s) { vector&amp;lt;char&amp;gt; org; vector&amp;lt;char&amp;gt; res; if(s.size() == 0) return true; for(int i = ...原创 2018-11-24 19:32:11 · 107 阅读 · 0 评论 -
LeetCode 387 字符串中的第一个唯一字符(First Unique Character in a String)
class Solution {public: int firstUniqChar(string s) { vector<char> ch; //遍历每个字符之后的 for(int i = 0; i < s.size(); i++) { i...原创 2018-11-25 16:24:07 · 89 阅读 · 0 评论 -
LeetCode 345 反转字符串中的元音字母 (Reverse Vowels of a String)
用一个容器按序填入所有所有的元音,并用一个字符替换。再将容器逆序输出填到对应的字符上即可实现。代码如下:class Solution {public: string reverseVowels(string s) { vector<char> yuan; for(int i = 0; i < s.size(); i++...原创 2018-11-25 14:31:32 · 142 阅读 · 0 评论 -
LeetCode414 第三大的数(Third Maximum Number)—— 排序:顺序容器的sort和reverse
class Solution {public: int thirdMax(vector&lt;int&gt;&amp; nums) { sort(nums.begin(),nums.end()); reverse(nums.begin(),nums.end()); int count = 0; for(int i = 0;...原创 2018-11-28 22:37:52 · 107 阅读 · 0 评论 -
LeetCode 231 2的幂(Power of Two)& LeetCode 326 3的幂(Power of Three)& LeetCode 342 4的幂(Power of Four)
class Solution {public: bool isPowerOfTwo(int n) { if(n == 0) return false; if(n == 1) return true; while(n) { if(n%2 != 0) return fals...原创 2018-11-24 21:27:30 · 93 阅读 · 0 评论 -
LeetCode 747 至少是其他数字两倍的最大数 (Largest Number At Least Twice of Others)
两层循环+边界判断就能够解决此类问题,代码如下:class Solution {public: int dominantIndex(vector<int>& nums) { int i,j; for( i = 0; i < nums.size(); i++ ) { for(j = 0; j...原创 2018-11-21 21:43:39 · 111 阅读 · 0 评论