![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论
want you tell me why
处于并将长期处于程序员初级阶段
展开
-
快排非递归
#include <iostream>#include <stack>using namespace std;int partion(int* root,int low,int high){ int part=root[low]; while(low<high) { while(low<high&&root[high]>=part) high--; root[low]=root[hi.原创 2020-09-05 14:43:47 · 101 阅读 · 0 评论 -
【动态规划】-7.最大正方形
221.最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square著作权归领扣网络所有。商业转载请联系官...原创 2020-01-08 11:06:49 · 203 阅读 · 0 评论 -
【动态规划】-6.打家劫舍问题
1.198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金...原创 2020-01-07 16:17:58 · 857 阅读 · 0 评论 -
【贪心算法】-8. 最大数
179.最大数给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-num...原创 2020-01-07 10:46:57 · 764 阅读 · 0 评论 -
【动态规划】-5.三角形最小路径和
120. 三角形最小路径和https://blog.csdn.net/Leeycw96/article/details/89371987大佬的思路给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+...原创 2020-01-05 10:22:42 · 117 阅读 · 0 评论 -
【动态规划】-4.爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶...原创 2020-01-02 16:03:38 · 72 阅读 · 0 评论 -
【回溯算法】-力扣总结
回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。适用于求解组合数较大...原创 2019-12-31 11:19:00 · 330 阅读 · 0 评论 -
【分治算法】-4.不同的二叉搜索树 II
95. 不同的二叉搜索树 II给定一个整数 n,生成所有由 1 ...n 为节点所组成的二叉搜索树。示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 ...原创 2019-12-09 15:38:20 · 103 阅读 · 0 评论 -
【分治算法】-3.为运算表达式设计优先级
241. 为运算表达式设计优先级给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +,-以及*。示例1:输入: "2-1-1"输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例2:输入: "2*3-4*5"输出: [-34, -14, ...原创 2019-12-09 12:28:45 · 228 阅读 · 0 评论 -
【分治算法】-2.归并排序
有一篇博客我觉得动图非常好:贴上大佬的链接https://blog.csdn.net/qq_40907279/article/details/81607634思想:可以运用分而治之方法来解决排序问题,该问题是将 n 个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若 n 为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序...原创 2019-12-08 11:26:26 · 303 阅读 · 0 评论 -
【算法设计】-几大算法简介
1.贪心算法贪心算法分为几个阶段,在每一个阶段,可以认为所做的决定是最好的,而不考虑将来的后果。一般来说,这意味着是某个局部最优,这种“眼下能够拿到的就拿”的策略就是这类算法名称的来源。当算法终止时,我们希望局部最优就是全局最优,如果真是这样的话,那么算法就是正确的了;否则,算法得到的就是一个次最优解。如果不要求绝对的最佳答案,那么有时用简单的贪心算法就可以生成近似答案,而不是用一般来说生成准...原创 2019-12-07 21:17:38 · 514 阅读 · 0 评论 -
【贪心算法】-7.种花问题
605. 种花问题假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1]...原创 2019-12-07 20:38:47 · 231 阅读 · 0 评论 -
【贪心算法】-6.买卖股票的最佳时机Ⅱ
122. 买卖股票的最佳时机 II给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(...原创 2019-12-07 17:29:01 · 56 阅读 · 0 评论 -
【贪心算法】-5.买卖股票的最佳时机
121. 买卖股票的最佳时机给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润...原创 2019-12-07 16:25:06 · 74 阅读 · 0 评论 -
【贪心算法】-4.根据身高重建队列
406. 根据身高重建队列假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,...原创 2019-12-07 16:07:22 · 148 阅读 · 0 评论 -
【贪心算法】-3.用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足...原创 2019-12-07 15:25:03 · 82 阅读 · 0 评论 -
【贪心算法】-2.无重叠子区间
435. 无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,...原创 2019-12-07 14:46:22 · 350 阅读 · 0 评论 -
【贪心算法】-1.分发饼干问题
455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj。如果 sj >= gi,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可...原创 2019-12-07 12:24:30 · 762 阅读 · 0 评论 -
【分治算法】-1.金块问题:递归和分治策略
例14-2 [金块问题] 有一个老板有一袋金块。每个月将有两名雇员会因其优异的表现分别被奖励一个金块。按规矩,排名第一的雇员将得到袋中最重的金块,排名第二的雇员将得到袋中最轻的金块。根据这种方式,除非有新的金块加入袋中,否则第一名雇员所得到的金块总是比第二名雇员所得到的金块重。如果有新的金块周期性的加入袋中,则每个月都必须找出最轻和最重的金块。假设有一台比较重量的仪器,我们希望用最少的比较次数找出...原创 2019-12-07 11:07:30 · 2702 阅读 · 0 评论 -
【排序算法】-十大经典排序对比表格
原创 2019-11-02 14:36:19 · 1569 阅读 · 0 评论 -
【排序算法】-9.桶排序
参见链接:https://www.runoob.com/w3cnote/bucket-sort.html原创 2019-11-02 14:32:14 · 83 阅读 · 0 评论 -
【排序算法】-8.计数排序
计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。计数排序过程中不存在元素之间的比较和交换操作,根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置。计数排序的核心是....是.....是......是(好吧,小编编不下去了,粘贴辅助过于无节操,大佬实在太过于nb,贴上大...原创 2019-11-02 14:04:29 · 260 阅读 · 0 评论 -
【排序算法】-7.归并排序
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:1.自上而下的递归(所有的方法都可以用迭代重写,因此有了第二种方法)2.自下而上的迭代归并排序的思想:将两个有序序列合并成一个有序序列#include<...原创 2019-11-01 23:27:23 · 181 阅读 · 0 评论 -
【排序算法】-6.堆排序
补充概念:若设二叉树的深度为k,除第k层外,其他各层(1~(k-1)层)的节点数都达到最大值,且第k层所有的节点都连续集中在最左边,这样的树就是完全二叉树。如下图:堆排序参见链接博客https://www.jianshu.com/p/0d383d294a80时间复杂度:它是建立在初始构建堆和在重建堆时的反复筛选上,在构建堆的过程中,因为我们是完全二叉树从最下层最右边的...原创 2019-11-01 21:39:48 · 212 阅读 · 0 评论 -
【排序算法】-5.快速排序
前言:快排最早由图灵奖获得者Tony Hoare设计出来的,他在形式化理论以及ALGOL60编程语言中,都有卓越的发明中都有卓越的贡献。是上世纪最伟大的计算机科学家之一;快排是他的一个小发明,被列为20世纪十大算法(有关十大算法参见链接博客https://www.sohu.com/a/228987774_488171)之一。另外:快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高...原创 2019-11-01 16:17:31 · 220 阅读 · 0 评论 -
【排序算法】-3.直接插入排序
基本思想:在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序#include<iostream>#include<vector>using namespace std;void print(vector<int> a) { for (int i = 0...原创 2019-11-01 10:27:35 · 84 阅读 · 0 评论 -
【排序算法】-2.选择排序
基本思想:在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。#include<iostream>#include<vector>using namespace std;void print(vector...原创 2019-11-01 09:54:57 · 83 阅读 · 0 评论 -
【排序算法】-1.冒泡排序
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来#include<iostream>#include<vector>using namespace std;void print(vector<int> a) { for (int i = 0; i < a.size(); i++) { cout << a[i] <...原创 2019-10-31 23:24:11 · 97 阅读 · 0 评论 -
【动态规划】-3.数组中有无等于特定值子序列
#include<iostream>#include<vector>#include<ctime>#include<deque>#include<list>#include<algorithm>#include<queue>#include<functional>//gre...原创 2019-10-31 22:26:51 · 110 阅读 · 0 评论 -
【动态规划】-2.不相邻的数和最大
Q1:不相邻的数和最大动态规划一般是非递归形式的#include<iostream>#include<vector>#include<ctime>#include<deque>#include<list>#include<algorithm>#include<queue>#include...原创 2019-10-31 17:14:49 · 478 阅读 · 0 评论 -
【动态规划】-1.入门
原创 2019-10-31 15:47:15 · 70 阅读 · 0 评论