菜鸡之路
山顶处见
好的关系往往是势均力敌
展开
-
算法-贪心算法-哈夫曼编码
一,概述基本思想:以字符的使用频率作为权构建棵哈夫曼树,然后利用哈夫曼树对字符进行编码。如何构造:每次从树的集合中取出没有双亲且权值最小的两棵树作为左右子树,构造一棵新树,新树根节点的权值为其左右孩子结点权值之和,将新树插入到树的集合中。二,算法设计1.确定合适的数据结构:每个节点的权值,双亲,左孩子,右孩子,以及节点的其他信息。从叶子节点到根的路径,再求出编码。树的信息(比如节点个数)static class Node implements Comparable<Node>原创 2021-10-28 14:56:58 · 1298 阅读 · 0 评论 -
算法-贪心算法-最短路径
一,问题分析最短路径问题:给定一个有向带权图G=(V,E),再设其中一个点为源点,现在要计算从源到其他所有各个节点的最短路径长度(权重)。二,算法设计1.我们可以使用迪杰斯特拉算法:先求出长度最短的一条路径,参照该路径求出长度次短的路径,依次扩展节点,知道到达源节点。2.基本思想:假设源点为u,设定2个集合S和V-S,S集合中刚开始只有u一个顶点,当扩展节点寻找最短路径时,将其找到的最短路径相连的节点加入到S中,而从V-S集合中移除,并用dist[]数组记录每个顶点所对应的最短路径长度。当S中包含原创 2021-10-17 15:45:18 · 2484 阅读 · 1 评论 -
算法-贪心算法-背包问题
背包问题1.问题描述:有n个宝物,每个宝物有一定的重量w和价值v,而运载的容量有限,容量为m,(宝物可以分割),怎么才能使运走的宝物价值最大呢。2.方法:每次从剩下的宝物中选出性价比最高的宝物。3.算法设计:①数据结构与初始化:设计一个结构体,存储宝物的重量w和价值v,和性价比。 static class Three implements Comparable<Three> { Three(double w, double v) { this原创 2021-10-14 13:32:38 · 271 阅读 · 0 评论 -
算法--贪心算法--最优装载
贪心算法1.一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择从而得到全局最优的解决方案。2.两个特性:贪心选择性质和最优子结构性质。①贪心选择:问题的整体最优解通过一系列局部最优的选择得到.(没有回溯)②最优子结构:一个问题的最优解包含其子问题的最优解3.步骤:①先确定贪心策略,选择最好的一个方案②根据贪心策略,一步一步得到局部最优解③把所有局部最优解合成为原来问题一个全局最优解最优装载问题在容器容量固定的情况下,运用贪心算法求解最优装载问题,要求装的物品最多,先从原创 2021-10-13 19:14:03 · 1072 阅读 · 0 评论 -
Xor Sum
问题Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助。你能证明人类的智慧么?Input输入包含若干组测试数据,每组测试数据包含若干行。输入的第一行是一个整数T(T &原创 2020-12-06 16:07:34 · 163 阅读 · 0 评论 -
Leetcode-括号的分数
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: “()”输出: 1示例 2:输入: “(())”输出: 2示例 3:输入: “()()”输出: 2示例 4:输入: “(()(()))”输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/score-of原创 2020-11-24 16:45:46 · 268 阅读 · 0 评论 -
Leetcode-反转每对括号间的字符串
给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = “(abcd)”输出:“dcba”示例 2:输入:s = “(u(love)i)”输出:“iloveu”示例 3:输入:s = “(ed(et(oc))el)”输出:“leetcode”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rever原创 2020-11-22 11:15:35 · 2005 阅读 · 0 评论 -
Leetcode-找丑数
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/get-kth-magic-number-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。ps:刚开始这道题放在了queue里,然后我自作聪明用了queue,把每一个q.front()*3 *5原创 2020-11-21 17:38:40 · 178 阅读 · 0 评论 -
Leetcode-单词搜索(回溯+dfs)
Leetcode-单词搜索(回溯+dfs)给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word原创 2020-11-07 15:40:22 · 225 阅读 · 0 评论 -
Leetcode-剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 3原创 2020-11-03 20:53:05 · 174 阅读 · 0 评论 -
Leetcode-“二分查找”-爱吃香蕉的珂珂
Leetcode-"二分查找”-爱吃香蕉的珂珂描述:珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 1:输入: piles原创 2020-10-30 16:02:00 · 378 阅读 · 0 评论 -
二分查找-搜索二维矩阵
标题:二分查找-搜索二维矩阵leetcode 74. 搜索二维矩阵编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-a-2d-matrix著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例1:输入:matrix = [[1,3,5,7],[10原创 2020-10-28 21:19:28 · 174 阅读 · 0 评论 -
如何找到数的因子,并计算和的最小值
*@如何找到数的因子,并计算和的最小值问题描述:如果v=abc,s=2(ab+ac+b*c).在v=932065482的情况下,求s的最小值。分析:这道题没法暴力,因为时间复杂度是o(n^3),所以我们可以先找出它的因子,而v的大小也超过1e8,所以我们就要思考一下,我们可以得出,100的平方根是10,而两个小于10的数相乘和两个大于10得数相乘都无法得到100,所以两个数要么是一个大于10一个小于10,,要么是两个都等于10,所以找到一个数的因子可以用sqrt(),大大降低了复杂度,然后找最小就是一个原创 2020-10-15 19:50:05 · 649 阅读 · 0 评论