
算法:贪心、分治、动规、回溯、枚举
文章平均质量分 93
记录 基本算法思想
z_stand
远离颠倒梦想,究竟涅槃
展开
-
贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码
1. 贪心算法概览贪心算法是一种算法思想。希望能够满足限制的情况下将期望值最大化。比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下找到最优的解决问题的方式。...原创 2021-02-16 15:06:18 · 616 阅读 · 0 评论 -
递归/归并:count of smaller numbers求逆序数
已知数组nums,求新数组count,count[i]代表了在nums[i]右侧且比 nums[i]小的元素个数。例如:nums = [5, 2, 6, 1], count = [2, 1, 1, 0];nums = [6, 6, 6, 1, 1, 1], count = [3, 3, 3, 0, 0, 0];nums = [5, -7, 9, 1, 3, 5, -2, 1], count...原创 2019-11-10 21:16:54 · 250 阅读 · 0 评论 -
递归/分治:归并排序
前言分治算法:将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出 子问题的解后进行合并,就可得到原问题的解。步骤如下:分解,将要解决的问题划分成若 干规模较小的同类问题;求解,当子问题划分得足够小时 ,用较简单的方法解决;合并,按原问题的要求,将子问题 的解逐层合并构成原问题的解。归并排序在描述归并排序之前,我们先来看看如何合并两个有序数...原创 2019-11-10 20:51:34 · 236 阅读 · 0 评论 -
递归/回溯:八皇后问题N-Queens
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题。将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放方式具体是怎样的?8皇后即 8*8的棋盘中,将8个皇后放置在棋盘上,且皇后之间无法俩俩攻击到对方。关于国际象棋中皇后的实力:国际象棋棋局中实力最强的一种棋子,也是最容易被吃掉的棋子。后可横直斜走,...原创 2019-11-10 16:25:29 · 431 阅读 · 0 评论 -
递归/回溯:Generate Parentheses生成合法括号
已知n组括号,开发一个程序,生成这n组括号所有的合法的组合可能。 例如:n = 3结果为: ["((()))", “(()())”, “(())()”, “()(())”, “()()()”]首先思考如何生成所有的括号组合的可能性,即例如2组括号,总共4个符号组合的可能型,那么每个位置就有两种括号的可能性,要么左括号,要么右括号,此时可以写出如代码:void generate(string ...原创 2019-11-10 13:34:57 · 250 阅读 · 0 评论 -
递归/回溯:Combination Sum II数组之和
问题如下:已知一组数(其中有重复元素),求这组数可以组成的所有子集中,子 集中的各个元素和为整数target的子集,结果中无重复的子集。例如: nums[] = [10, 1, 2, 7, 6, 1, 5], target = 8结果为: [[1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]同样之前有类似的相关的问题递归/回溯:Subsets II求子集(有重复元素...原创 2019-11-10 12:04:44 · 286 阅读 · 0 评论 -
递归/回溯:Subsets II求子集(有重复元素)
上一篇描述了针对数组中没有重复元素进行子集的求取过程递归/回溯:subsets求子集但是当出现如下数组时:例如: nums[] = [2, 1, 2, 2]结果为: [[], [1], [1,2], [1,2,2], [1,2,2,2], [2], [2,2], [2,2,2]]注意: [2,1,2]与[1,2,2]是重复的集合,则不满足集合的要求。思考:同样的递归回溯方式,即每一个元...原创 2019-11-10 11:42:01 · 486 阅读 · 0 评论 -
递归/回溯:subsets求子集
前言回溯法又称为试探法,但当探索到某一步时,发现原先选择达不到 目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。已知一组数(其中无重复元素),求这组数可以组成的所有子集。 结果中不可有无重复的子集。例如: nums[] = [1, 2, 3]结果为: [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]以上的初始数组...原创 2019-11-10 11:28:59 · 600 阅读 · 0 评论 -
贪心:expedition 最优加油方法
int cmp(pair<int,int> a,pair<int,int> b) { return a.first > b.first;}int get_least_expedition(int L, int P,vector<pair<int,int>> &stop) { priority_queue<in...原创 2019-11-08 09:21:40 · 368 阅读 · 0 评论 -
贪心:Burst Balloons 最少次数完成射击气球
已知在一个平面上有一定数量的气球,平面可以看作一个坐标系,在平面的x轴的不同位 置安排弓箭手向y轴方向射箭,弓箭可以向y轴走无穷远;给定气球的宽度 xstart ≤ x ≤ xend,问至少需要多少弓箭手,将全部气球打爆?例如: 四个气球 : [[10,16], [2,8], [1,6], [7,12]],至少需要2个弓箭手。如下过程在射击的过程中想要安排最少的弓箭手保证能够完成所有气球的...原创 2019-11-08 09:05:19 · 450 阅读 · 0 评论 -
贪心:remove K digits移除K个数字
问题描述:已知一个使用字符串表示的非负整数num,将num中的k个数字移 除,求移除k个数字后,可以获得的最小的可能的新数字。例如:num = “1432219” , k = 3在去掉3个数字后得到的很多很多可能里,如1432、4322、2219、1219、1229…; 去掉数字4、3、2得到的1219最小!贪心规律:根据以上举例,移除三个数的过程中每一次我们移除一个数的时候,想...原创 2019-11-05 23:25:11 · 351 阅读 · 0 评论 -
贪心:Wiggle Subsequence 摇摆序列
一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为摇摆序列。一个小于2个元素的序列直接为摇摆序列。给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度:输入[1,17,5,10,13,15,10,5,16,8],结果为7([1,17,10,13,10,16,8] )序列 [1, 7, 4, 9, 2, 5],相邻元素的差 (6, -3, 5, -7, 3),则...原创 2019-11-03 20:31:30 · 603 阅读 · 0 评论 -
贪心:assign cookies分糖果
贪心算法的核心:遵循某种规律,使用最少的资源来完成目标所以在了解贪心算法的时候需要明确两点寻找共有的规律每一步的迭代使用最优的策略(消耗最少的资源)问题如下:已知一些孩子和一些糖果,每个孩子有需求因子g,每个糖果有大小s,当 某个糖果的大小s >= 某个孩子的需求因子g时,代表该糖果可以满足该孩子;求使用这 些糖果,最多能满足多少孩子?(注意,某个孩子最多只能用1个糖果满足)...原创 2019-11-03 20:12:31 · 254 阅读 · 0 评论