算法
shadowgully
这个作者很懒,什么都没留下…
展开
-
WD暴力求解-例题2.5 叠筐
【代码】WD暴力求解-例题2.5 叠筐。原创 2024-03-09 13:12:59 · 511 阅读 · 0 评论 -
WD暴力求解-习题2.1 与7无关的数
【代码】WD暴力求解-习题2.1 与7无关的数。原创 2024-03-08 15:27:28 · 382 阅读 · 0 评论 -
WD暴力求解-例题2.3 对称平方数
【代码】WD暴力求解-例题2.3 对称平方数。原创 2024-03-08 15:26:40 · 325 阅读 · 0 评论 -
WD暴力求解-例题2.2 反序数
【代码】WD暴力求解-例题2.2 反序数。原创 2024-03-08 15:25:07 · 315 阅读 · 0 评论 -
WD暴力求解-例题2.1 abc
【代码】WD暴力求解-例题2.1 abc。原创 2024-03-08 15:23:52 · 432 阅读 · 0 评论 -
贪心算法-双指针算法-通过连接另一个数组的子数组得到一个数组
你可以分别在 nums 中选出第 0 个子数组 [1,-1,0,1,-1,-1,3,-2,0] 和第 1 个子数组 [1,-1,0,1,-1,-1,3,-2,0]。:选择子数组 [1,2,3,4,10,-2] 和 [1,2,3,4,10,-2] 是不正确的,因为它们出现的顺序与 groups 中顺序不同。:选择子数组 [7,7,1,2,3,4,7,7] 和 [7,7,1,2,3,4,7,7] 是不正确的,因为它们不是不相交子数组。[10,-2] 必须出现在 [1,2,3,4] 之前。原创 2022-12-17 21:41:36 · 160 阅读 · 0 评论 -
并查集-检查边长度限制的路径是否存在
给你一个n个点组成的无向图边集edgeList,其中表示点ui和点vi之间有一条长度为disi的边。请注意,两个点之间可能有。给你一个查询数组queries,其中,你的任务是对于每个查询queries[j],判断是否存在从pj到qj的路径,且这条路径上的每一条边都limitj。请你返回一个answer,其中,当queries[j]的查询结果为true时,answer第j个值为true,否则为false。:上图为给定的输入数据。注意到 0 和 1 之间有两条重边,分别为 2 和 16。原创 2022-12-14 21:41:37 · 139 阅读 · 0 评论 -
位运算-两整数之和
此外,本题还有一个特别好玩的解法,我们知道对数函数能够将乘除法运算变为加减法运算。同理我们也能把加减法运算用乘除法的形式来表示。本题要求不使用加减号来完成加法运算,按计算机思维来考虑的话不难想到可以通过位运算来模拟计算机的加法。本题需要用到三个位运算符。可以知道该位是否需要进位,由于进位值将加到更高位,因此需要进行左移位。由于左移位最终会变成0,这时也就能直接得出答案了。输入:a = 1, b = 2。输入:a = 2, b = 3。,计算并返回两整数之和。可实现不进位的加法运算。原创 2022-12-14 19:58:23 · 172 阅读 · 0 评论 -
双指针算法-快慢指针-环形链表 II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置**(索引从 0 开始)**。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.c原创 2022-02-11 17:13:53 · 126 阅读 · 0 评论 -
双指针算法-合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入:nums1 = [1,2,3,0原创 2022-02-11 16:00:14 · 580 阅读 · 0 评论 -
双指针算法-两数之和 II
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。你可以假设每个输入 只对应唯一的答案 ,而且原创 2022-02-11 15:29:07 · 193 阅读 · 0 评论 -
贪心算法-非递减数列
给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个 4 变成 1 来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输出: false解释: 你不能原创 2022-02-10 09:53:19 · 256 阅读 · 0 评论 -
贪心算法-根据身高重建队列
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [[7,0],[4,4],[原创 2022-02-10 09:51:45 · 108 阅读 · 0 评论 -
贪心算法-转折-买卖股票的最好时机
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润 。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买原创 2022-02-09 15:01:54 · 139 阅读 · 0 评论 -
贪心算法-区间问题-划分字母区间
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。示例:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。提示:S的长度在[1, 500]之间原创 2022-02-09 14:46:26 · 168 阅读 · 0 评论 -
贪心算法-区间问题-合并区间-用最少数量的箭引爆气球
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 x start,x end, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的原创 2022-02-09 14:19:09 · 96 阅读 · 0 评论 -
贪心算法-种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,0,0,原创 2022-02-09 13:58:55 · 319 阅读 · 0 评论 -
贪心算法-区间问题-无重叠区间
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入: [原创 2022-02-09 13:49:35 · 572 阅读 · 0 评论 -
动态规划-不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRgqqAoC-1607527338626)( https://assets.leetcode.com/uploads/2018/10/22/robot_maze.png)]示例 1:输入:m = 3,原创 2020-12-09 23:22:59 · 99 阅读 · 0 评论 -
快速幂算法-Pow(x, n)-leetcode-50
实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。第一印象看到这道题,我们理所当然的就想原创 2020-12-09 22:57:18 · 195 阅读 · 0 评论 -
二分法-元素的起始终止位置(四种方法)
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例3:输入:nums = [原创 2020-12-03 18:38:49 · 925 阅读 · 0 评论 -
埃式筛&线性筛-小于n的质数数量(多种方法及详细分解)
统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0分析:对于该题,显而易见的方式就是暴力遍历,对于小于n的每个数,来判断它是否是质数。暴力法/*执行结果:通过执行用时:772 ms, 在所有 C++ 提交中击败了5.13%的用户内存消耗:6.3 MB, 在所有 C++ 提交中击败了67.15%的用原创 2020-12-03 18:34:54 · 125 阅读 · 0 评论 -
贪心算法-分配问题-分发糖果
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入: [1,2,2]输出: 4解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个原创 2020-12-03 11:06:06 · 1342 阅读 · 0 评论 -
贪心算法-分配问题-分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1原创 2020-12-03 11:05:34 · 1885 阅读 · 0 评论 -
中序遍历(递归+迭代)
题目要求给定一个二叉树,返回它的中序 遍历。示例输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解答:迭代算法可用栈保存曾经路过的中序结点,回溯时可用bool型变量屏蔽对左子树的访问,避免发生死循环。代码及分析注释如下:#include<iostream>#include<vector>using namespace std;struct T原创 2020-09-14 22:20:06 · 2932 阅读 · 0 评论 -
货币系统面值构造问题
题目描述: 传统的货币系统是由1,5,10,20,50,100单位的面值组成的,如果要构造一个20单位的面值,可能的方法有:20x1,10x2,10+5X2等等。写一个程序,计算对于给定的货币系统,有多少种方法可以构造出某个单位的面值。输入: 输入货币系统中的货币种类数V(1<=V<=25),以及所要构造的面值N(1<=N<=1000)。再输入V个数:货币系统中货币的所...原创 2020-04-14 13:34:11 · 571 阅读 · 0 评论 -
内存动态分区管理模拟实现
//Link.h 数据结构及函数定义#ifndef LINK_H#define LINK_Htypedef int BOOL;#define TRUE 1#define FALSE 0//定义分区链表结构体typedef struct DNode{ int Daddress;//首地址 int Dsize; //当前长度 DNode* next; //下一结点指针}...原创 2019-12-11 11:31:36 · 2510 阅读 · 0 评论 -
有界深度优先搜索-八数码问题
有界深度优先搜索的使用题目要求用有界深度优先搜索方法求解如图1所示八数码问题。初始状态为S0,目标状态为Sg,要求寻找从初始状态到目标状态的路径。(深度界限自行定义)源代码如下:/* dm DFS* 2 8 1 2 3 * 1 6 3 --> 8 4 * 7 5 4 ...原创 2019-09-28 20:06:22 · 17713 阅读 · 1 评论