算法提升技巧
我是一片小树叶
树叶虽小,我心很大
展开
-
买卖股票最佳时期系列
代码已在 leetcode 上验证通过。通解方式,学习:https://leetcode-cn.com/circle/article/qiAgHn/T[i][k][0] = max(T[i - 1][k][0], T[i - 1][k][1] + prices[i])T[i][k][1] = max(T[i - 1][k][1], T[i - 1][k - 1][0] - prices[i])121.买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你.原创 2020-08-27 10:58:23 · 535 阅读 · 2 评论 -
容器接水/矩形面积最大系列
代码已在 leetcode 上验证通过。11.盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。class Solution {public: int maxArea(vector<int>& height) { int l = 0, r .原创 2020-08-20 15:41:45 · 693 阅读 · 0 评论 -
跳跃游戏系列
代码已在 leetcode 上验证通过。55.跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。class Solution {public: bool canJump(vector<int>& nums) { int maxCnt = 0; for (int i = 0; i < nums.size(); i++) {.原创 2020-08-19 22:23:25 · 529 阅读 · 0 评论 -
只出现一次的数字系列
代码已在 leetcode 上验证通过。136. 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。class Solution {public: int singleNumber(vector<int>& nums) { int res = 0; for (int i = 0; i < nums.size(); i++) res = res ^ nums[i];.原创 2020-08-09 11:28:03 · 281 阅读 · 0 评论 -
限制条件下计算累加和
Question:求 1+2+…+n ?要求不能使用乘除法、for、while、if、else、switch、case 等关键字。ps: 代码无误,但运行则需要自行整理(没错,我就是懒得整理)。.No.0 三目运算符class Solution {public: int sumNums(int n) { return n==0 ? 0 : n+sumNums(n-1); }};No.1 或断路class Solution {public: .原创 2020-08-07 10:17:46 · 983 阅读 · 2 评论 -
二分法查找
一、简介二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下:(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。(3)如果某一步数组为空,则表示找不到目标元素。二分法查找的时间复杂度O(lo...原创 2020-01-02 21:55:39 · 321 阅读 · 0 评论 -
九大排序算法总结
转载:## 标题 ##https://blog.csdn.net/foreverling/article/details/43798223排序的定义: 输入:n个数:a1,a2,a3,…,an 输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’<=a2’<=a3’<=…<=an’。In-place sort:插入排序、选择排序、冒泡排序、堆排序、...转载 2018-09-08 18:41:20 · 3934 阅读 · 0 评论 -
简单快速幂的使用方法
转载:https://baike.baidu.com/item/快速幂/5500243?fr=aladdinhttps://blog.csdn.net/qq_40129237/article/details/79883665一、定义顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。二、原理以下以求a的b次方来介绍 。把...转载 2019-02-16 14:57:23 · 643 阅读 · 0 评论 -
求解约瑟夫环问题
转载:https://blog.csdn.net/tingyun_say/article/details/52343897一、约瑟夫环介绍讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀死所有人。于是约瑟夫建议:每次由其他两人一起杀死一个...转载 2019-10-13 22:53:01 · 1039 阅读 · 0 评论 -
卡特兰(Catalan)数
参考:http://lanqi.org/skills/10939/卡特兰(Catalan)数来源于卡特兰解决凸n+2边形的剖分时得到的数列Cn,在数学竞赛、信息学竞赛、组合数学、计算机编程等方面都会有其不同侧面的介绍.卡特兰问题的解决过程应用了大量的映射方法,堪称计数的映射方法的典范。为了便于读者理解,我们先介绍一些卡特兰问题的简单变形,再介绍卡特兰问题及其解法。问题一 进出栈栈是一种先进后...转载 2019-04-08 00:03:45 · 4096 阅读 · 0 评论 -
KMP算法解析
一、简介KMP 算法是用来求一个较长字符串是否包含另一个较短字符串的算法,其中难点在于求解 next 数组。二、next 数组含义next 数组含义为:如果匹配到该字符时失败,回溯的位置。strabaabcacpos01234567next-10011201其中,next 数组首位设置为-1,意味着首位匹...原创 2019-09-10 22:57:54 · 257 阅读 · 0 评论 -
有限自动机字符串匹配
引言:本文参考自《算法导论》中 “32.3 利用有限自动机进行字符串匹配” ,其目的不仅仅是为了改善常规算法的时间复杂度问题,更是为了给在解决类似情况提供一个有限自动机方案的参考。很多字符串匹配算法都要建立一个有限自动机,它是一个处理信息的简单机器,通过对文本字符串 T 进行扫描,找出模式 P 的所有出现位置。这些字符串匹配的自动机都非常有效:它们只对每个文本字符检查一次,并且检查每个文...原创 2019-12-25 11:15:23 · 2093 阅读 · 2 评论 -
sort 与 priority_queue 比较
类型sortpriority_queue默认升序降序(大根堆)设为升序lessgreater设为降序greaterless重载 > 为 <降序升序重载 < 为 >降序升序重载 () 为 >降序升序重载 () 为 <升序降序...转载 2019-09-20 18:56:39 · 667 阅读 · 0 评论 -
i++ 与 ++i 的使用方法
转载:https://blog.csdn.net/faterman/article/details/26715399一、含义:(1) i++ 简单来说就是先用i的值来参加表达式的计算,然后再自加1i = 4;a = i++; //此时,先做a=i=4,再做i++,故a=4,i=5(2) ++i 则是先自增1,再用自加后的值来做运算。i = 4;a = ++i; ...转载 2019-02-16 14:49:00 · 5402 阅读 · 0 评论 -
二叉树的遍历规则
遍历方式树的遍历顺序分为三种:前序遍历、中序遍历、后序遍历。此外,也可称作是:前根遍历、中根遍历、后根遍历。遍历规则初学者若是对三种遍历规则易混淆,可如此记忆:左子树在右子树前遍历,再根据“遍历方式名”将根节点的遍历顺序放在前、中、后。下面,对三种遍历方式分别讲述,以如下二叉树为例:前序遍历:(1)访问根节点(2)前序遍历左子树(3)前序遍历右子树注意:在完成第2,3步的时...原创 2018-11-04 20:21:21 · 412 阅读 · 0 评论 -
递归、迭代、动态规划的区别与联系
一、定义递归:程序调用自身,从顶部将问题分解,通过解决掉所有分解出来的小问题,来解决整个问题。迭代:利用变量的原值推算出变量的一个新值。递归中一定有迭代,但是迭代中不一定有递归。动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。下面通过斐波那契数列相关代码来比较一下三者。斐波那契数列:1,1,2,3,5,8,11,13…二、递归自上而下调用函数本...原创 2018-11-12 19:22:26 · 3992 阅读 · 0 评论