
算法
文章平均质量分 50
庸人自扰61
这个作者很懒,什么都没留下…
展开
-
C的钩子函数学习
定义一个全局变量,函数指针g_pFun,然后写两个功能函数,一个是返回最大值Max,一个是返回最小值Min。这两个就是钩子函数,将指针指向他们中的一个的时候,就叫做挂钩子;原创 2023-02-03 11:29:19 · 204 阅读 · 0 评论 -
java优先队列 leetcode1606
leetcode1606 优先队列原创 2022-12-20 17:29:28 · 564 阅读 · 0 评论 -
滑动窗口算法
滑动窗口算法的思路是这样:1、我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。2、我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T 中的所有字符)。3、此时,我们停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求(不包含 T 中的所有字符了)。同时,每次增加 left原创 2022-04-02 11:33:08 · 1671 阅读 · 0 评论 -
1162. 地图分析 BFS && Dijkstra算法
你现在手里有一份大小为N x N 的 网格 grid,上面的每个 单元格 都用0和1标记好了。其中0代表海洋,1代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的。我们这里说的距离是「曼哈顿距离」(Manhattan Distance):(x0, y0) 和(x1, y1)这两个单元格之间的距离是|x0 - x1| + |y0 - y1|。如果网格上只有陆地或者海洋,请返回-1。示例 1:输入:[[1,0,1],[0,0,0...原创 2021-01-30 20:00:27 · 173 阅读 · 0 评论 -
989. 数组形式的整数加法 大数加法
对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数 X 的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:A = [2,7,4], K = 181输出:[4,5,5]解释:274 + 181 = 455示例 3:输入:A = [2,1,...原创 2021-01-22 15:16:45 · 129 阅读 · 1 评论 -
1011. 在 D 天内送达包裹的能力 二分查找
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i个包裹的重量为weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1 天:1, 2, 3, 4, 5第...原创 2021-01-21 19:12:07 · 113 阅读 · 0 评论 -
746. 使用最小花费爬楼梯 DP
数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:输入: cost = [1, 100, ...原创 2020-12-21 19:34:28 · 120 阅读 · 0 评论 -
695. 岛屿的最大面积 DFS
给定一个包含了一些 0 和 1 的非空二维数组grid 。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,...原创 2020-12-18 17:17:09 · 118 阅读 · 2 评论 -
62. 不同路径 dfs失败,需要DP
一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. ..原创 2020-12-10 10:41:50 · 136 阅读 · 0 评论 -
861. 翻转矩阵后的得分 贪心
有一个二维矩阵A 其中每个元素的值为0或1。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111...原创 2020-12-07 20:54:27 · 124 阅读 · 0 评论 -
204. 计数质数 埃氏筛
统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0int countPrimes(int n){ if(n<2) return 0; int primes[n]; int num=0; memset(primes,1,sizeof(primes)); fo...原创 2020-12-03 18:06:32 · 106 阅读 · 0 评论 -
454. 四数相加 II 求(A1+..An)=某个数类似方法总结
给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过231 - 1 。例如:输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]输出:2解释:两个元组...原创 2020-11-27 10:56:30 · 208 阅读 · 0 评论 -
1370. 上升下降字符串 桶计数
给你一个字符串s,请你根据下面的算法重新构造字符串:从 s中选出 最小的字符,将它 接在结果字符串的后面。从 s剩余字符中选出最小的字符,且该字符比上一个添加的字符大,将它 接在结果字符串后面。重复步骤 2 ,直到你没法从 s中选择字符。从 s中选出 最大的字符,将它 接在结果字符串的后面。从 s剩余字符中选出最大的字符,且该字符比上一个添加的字符小,将它 接在结果字符串后面。重复步骤 5,直到你没法从 s中选择字符。重复步骤 1 到 6 ,直到 s中...原创 2020-11-25 11:32:53 · 88 阅读 · 0 评论 -
222. 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2h个节点。示例:输入: 1 / \ 2 3/ \ /4 5 6输出: 6#这道题是中等,说实话,碰巧我在学BFS。。就感觉很简单,直接套模板模板:头结点进队列;while(队列不为空){size=ta...原创 2020-11-24 15:55:00 · 89 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓..原创 2020-11-23 11:29:42 · 91 阅读 · 0 评论 -
求链表倒数第k个节点的值
##没有题目,主要就是看到了链表的操作,使用双指针完成求倒数第k个节点的值,觉得很聪明的一个求法。所以记录一下。先来看"倒数第k个元素的问题"。设有两个指针 p 和 q,初始时均指向头结点。首先,先让 p 沿着 next 移动 k 次。此时,p 指向第 k+1个结点,q 指向头节点,两个指针的距离为 k 。然后,同时移动 p 和 q,直到 p 指向空,此时 q 即指向倒数第 k 个结点。可以参考下图来理解:转自leetcode题解。...原创 2020-11-20 18:00:09 · 205 阅读 · 0 评论 -
面试题 02.03. 删除中间节点
##题实现很简单,但是思路很舒服很聪明,记录一下实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f代码:/** * Definition for singly-linked list. * struct ListNode { * int val;.原创 2020-11-19 21:08:33 · 78 阅读 · 0 评论 -
双重排序之快排
leetcode第几题忘了,这是在做华为的工作级demo题:另外我记得有大神说过,凡是这种数对的,涉及排序的,要么就是第一正序,第二降序,要么就是第一降序第二正序。记录一下!!!这个就是第一降序,第二正序。先按照从大到小的排,然后依次插入。后面要插入的,前面就是所有比他大的。代码:/* * 输入**people是长度为peopleSize的数组指针的数组,其中每个元素(也是一个数组) * 的长度组成 *peopleColSize数组作为另一输入,*peopleColSize数组的长原创 2020-11-18 18:07:14 · 261 阅读 · 0 评论 -
1030. 距离顺序排列矩阵单元格 使用地址做UTHASH的key
给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为(r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)示例 1:输入:R = 1, ..原创 2020-11-17 10:53:23 · 99 阅读 · 0 评论 -
leetcode 1356. 根据数字二进制下 1 的数目排序
#简单题,没啥说的,主要就是修改排序规则,我用的哈希表的排序,等会试试快排给你一个整数数组arr。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中1的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例 1:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。[1,2,4,8] 都有 1 个 1 。[3,5,6] 有 ...原创 2020-11-06 12:16:02 · 85 阅读 · 0 评论 -
leetcode 127. 单词接龙 BFS
给定两个单词(beginWord和 endWord)和一个字典,找到从beginWord 到endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例1:输入:beginWord = "hit",endWord ...原创 2020-11-06 12:13:58 · 101 阅读 · 0 评论 -
57. 插入区间
##第一道hard思路:将新插入的区间一个个去比较,有交集的,取并集并放到哈希表里,拿新并集继续和下一个比较,最后做一个排序。注意插入到哈希表中的数据,取更大的并集即可。题目:给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例2...原创 2020-11-05 11:49:36 · 105 阅读 · 0 评论 -
leetcode 9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。##没啥说的,先通过x/10,x%10将整形转字符数组,然后两个指针分别指向首尾,相同就i--,j++,然后最后判断i.原创 2020-11-03 21:12:17 · 203 阅读 · 0 评论 -
leetcode 941. 有效的山脉数组
每日一题:给定一个整数数组A,如果它是有效的山脉数组就返回true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在0 < i< A.length - 1条件下,存在i使得:A[0] < A[1] < ... A[i-1] < A[i]A[i] > A[i+1] > ... > A[A.length - 1]示例 1:输入:[2,1]输出:...原创 2020-11-03 10:39:52 · 147 阅读 · 0 评论 -
leetcode 349 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序.自己思路直接暴力,两个for循环搞定,但是这有个条件,输出结果每个元素是唯一的,可以在两个for循环之后再去重,我的想法是,两个for循环之前就去重,这样时间复..原创 2020-11-02 20:09:50 · 107 阅读 · 0 评论 -
leetcode 1207. 独一无二的出现次数
给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]输出:true提示:...原创 2020-10-30 16:59:22 · 145 阅读 · 0 评论 -
leetcode 129. 求根到叶子节点数字之和
最近消失好久,因为跳槽到华为做路由器,又开始学起了C,刷OJ题..题目:给定一个二叉树,它的每个结点都存放一个0-9的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明:叶子节点是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers著作权归领扣...原创 2020-10-30 15:16:06 · 115 阅读 · 0 评论