
算法-leetcode
文章平均质量分 50
基础算法题
_苏沐
优快云全栈领域优质创作者,HBCPC一等奖,阿里云专家博主,支付宝社区平台开发者,openguass社区贡献者,墨天轮平台创作者,稀土掘金创作者,Apollo社区创作者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【刷题版】掌握算法的一揽子计划——动态规划总结
动态规划是一种通过将原问题分解为相对简单的子问题来求解,然后将子问题的解存储起来避免之后重复计算,并最终将子问题组合成原问题的解决方法。动态规划并不算是一种具体的算法,更应该被认为是一种解决问题的思想。动态规划通常适用于具有重叠子问题和最优子结构性质的问题。具有重叠子问题的问题意味着在解决问题的过程中,我们需要解决相同的子问题。而最优子结构性质意味着问题的最优解可以通过其子问题的最优解来计算。能用动态规划解决的问题,需要满足三个条件:最优子结构,无后效性和子问题重叠。原创 2023-03-19 22:56:31 · 562 阅读 · 5 评论 -
【刷题版】掌握算法的一揽子计划——深度优先搜索和回溯
深搜深度优先搜索(Depth First Search,DFS)属于图论中的概念。在图论中主要用于遍历树或者图上的节点,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。而在搜索算法中主要通过递归方便地实现暴力枚举。回溯属于一种深搜的技巧,常常用在深搜中。原创 2023-03-18 16:33:46 · 1208 阅读 · 4 评论 -
leetcode线程题1116——打印零与奇偶数
对于本题没有想到的地方是调用过程,原代码编写的没有自己加入for循环,以为三个线程会不停被调用。一直不过,只输出“01”就结束了,根本没有循环起来。输出完奇数偶数,释放输出0所需的信号量。直接考虑信号量解决问题。原创 2023-03-08 11:13:06 · 207 阅读 · 0 评论 -
leetcode线程题1117——H2O 生成(两个氢原子结合一个氧原子)
书写满足氢氧结合过程中的氢、氧线程同步代码。原创 2023-03-07 19:10:16 · 265 阅读 · 0 评论 -
通过哲学家进餐问题学习线程间协作(代码实现以leetcode1226为例)
理顺线程争抢信号量问题的思路,使用c++/go解决编码问题原创 2023-02-24 13:34:38 · 720 阅读 · 0 评论 -
LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55)
遍历从4~6的位置尝试跳跃,直到试探到最远的位置,记录到max_index。记录跳跃次数,如果跳到了终点,就得到了结果。原创 2022-12-27 15:48:41 · 725 阅读 · 0 评论 -
LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)
res[n] = max{ res[n-1] , 数组中最后一个数据+res[n-2] } (res是前k个房子中偷盗最多的钱的数组)原创 2022-12-27 10:44:54 · 583 阅读 · 0 评论 -
结构体排序问题
题目如下:刚刚看到这道题的时候一点点思路都没有……连题目都没读懂……原创 2019-01-03 10:33:57 · 87 阅读 · 0 评论 -
小a与"204"
【解题思路】这道题的考点是贪心、模拟输入的序列不需要纠结,因为不需要输出方案,只需要记录下2 0 4分别出现的次数即可。(emmm,我觉得就是4 0 4 0的排直到其中一个用光,那个用光的就拿2补上。)最优思路:实际上此题还可以推广到更一般的情况,也就是第一个位置放最大的,第二个位置放最小的,第三个位置放第二大的……以此类推,这种思路写起来也会更简单一些贴代码:下面是一般情况的时候...原创 2019-01-30 20:20:08 · 180 阅读 · 0 评论 -
性价比排序~
题目:处女座挑选了n道题开始刷,自己没有解决的题目每分钟都会给他带来bi的疲倦值,而解决每一道题目都需要花费ai分钟的时间。当然,处女座一般都是考虑清楚了再写题的,所以他在写题的时候都会精神抖擞,也就是说,当前正在写的那一题并不会给他带来任何疲劳。找出最小所需要的疲倦值。ps:(2≤N≤105).(2≤ai≤4*106).(1≤bi≤1000)#include <stdio.h&g...原创 2019-01-30 20:18:22 · 331 阅读 · 0 评论 -
容斥原理 (两个例题)
容斥原理的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。以下列举两个例题:一、1e9个兵临城下,看题戳这儿...原创 2018-12-28 09:03:41 · 2540 阅读 · 0 评论 -
leetcode 线程题 1114. 按序打印
三种方法 保证线程按序打印原创 2022-08-23 16:30:31 · 366 阅读 · 0 评论 -
贼全面的计算机考研数据结构算法题集合(408+自命题均可)
一篇很全面的题集合!按考研大纲顺序排列,题源leetcode!原创 2022-07-15 09:31:37 · 9198 阅读 · 9 评论 -
leetcode99-恢复二叉搜索树(两个空间复杂度的解法)
qianxin的笔试题第二道(递归递两个点才写出来)原创 2022-03-18 06:30:00 · 866 阅读 · 0 评论 -
leetcode剑指 Offer 专项突击版(051、008、016)
leetcode二叉树后序遍历、深度优先搜索、前缀和、字符串哈希表的考察原创 2022-03-16 20:38:20 · 460 阅读 · 0 评论 -
leetcode剑指 Offer 专项突击版(23、047、028、036)
leetcode栈的应用、二叉树后序遍历、递归深度优先搜索、链表插入、归并排序的考察原创 2022-03-14 21:18:50 · 1686 阅读 · 1 评论 -
LeetCode上仅有的4道shell题解析
leetcode的四道shell题 linux awk命令 grep命令 tail命令 etc.原创 2022-03-09 21:21:01 · 181 阅读 · 0 评论 -
LeetCode剑指 Offer 49. 丑数(dp/打表)
leetcode 里的dp 或者暴力打表原创 2022-03-02 15:51:42 · 212 阅读 · 0 评论 -
LeetCode剑指 Offer 58—左旋转字符串(三次翻转/double+substr)
三次翻转的方法/双倍再截取的方法 均可原创 2022-01-10 21:58:26 · 364 阅读 · 0 评论 -
LeetCode剑指 Offer 35—复杂链表的复制(哈希表/递归)
链表的深拷贝原创 2022-01-10 21:45:19 · 276 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树(递归/并且或者要考虑好)
orz,没有思路,有了思路还是错的正确思路递归:可以仿照归并排序,我这么觉得 两边判断,如果不是当我没说原创 2022-01-07 22:26:38 · 398 阅读 · 4 评论 -
leetcode剑指offer11—旋转数组的最小值(二分/边界值)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。这道题(冷笑)居然考二分,直接遍历输出也能过……考虑二分的方法:5 6 7 8 1 2 2下标low = 0,high = size-1,对于中间值8大于“最后”一个值时,要舍弃左区间,此时mid值也原创 2021-12-07 17:10:23 · 212 阅读 · 0 评论 -
leetcode113–二叉树求路径和(递归/c语言/简单)
leetcode-113 ????????????给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * };原创 2021-12-03 20:50:54 · 395 阅读 · 0 评论 -
leetcode105/1382-构建二叉树与二叉平衡树(人生苦短,速速递归)
构建二叉树前序序列与中序序列 共同构建二叉树:1⃣️遍历前序序列,找到第一个即为根结点2⃣️去中序序列中找相应的结点,该结点左侧即为左子树,右侧即为右子树????3⃣️递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */struct TreeNo原创 2021-12-01 15:18:41 · 1073 阅读 · 0 评论 -
leetcode905–按奇偶排序数组(经典/原地排序)
经典题目:给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。主要要掌握最优解 这道题很简单类快排(你不是真正的快排~)/** * Note: The returned array must be malloced, assume caller calls free(). */void swap(int *a,int *b){ int t = *a; *a = *b; *b = t;原创 2021-12-05 10:11:01 · 113 阅读 · 0 评论 -
卡特兰数—以leetcode22括号生成为例(笔记)
/** * Note: The returned array must be malloced, assume caller calls free(). */void bracket(int left,int right,int n,char arr[],char c,char **returns,int *returnSize){ if(left == 0 && right == 0) { arr[left+right] = c; ...原创 2021-12-02 23:49:31 · 969 阅读 · 0 评论 -
leetcode443–压缩字符串(双指针/简单)
给你一个字符数组 chars ,请使用下述算法压缩:从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :如果这一组长度为 1 ,则将字符追加到 s 中。否则,需要向 s 追加字符,后跟这一组的长度。压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。请在 修改完输入数组后 ,返回该数组的新长度。你必须设计并实现一个只使用常量额外空间的算法来解决此问题。在内部原创 2021-12-04 16:10:05 · 163 阅读 · 0 评论 -
leetcode150–逆波兰表达式求值(栈/后缀表达式)
根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 :输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9贴一个贼丑的代码 心塞塞。//咋想的啊 能写出一句//top = top -= 2;//无了原创 2021-12-04 16:02:32 · 172 阅读 · 0 评论 -
Leetcode53/152—最大子数组和/最大子数组乘积(状态转移方程/不熟)
53.最大子数组和给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。????♂️思路:aaaaa,我老不会这个题动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字如果 sum <= 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当前遍历数字每次比较 s原创 2021-12-06 10:59:25 · 293 阅读 · 2 评论 -
leetcode160–相交链表(最优解/双指针)
今天做的三道题比较简单~给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。这道题注意思路,尽量简洁代码,对照官方答案,是我不配了……先附上不优雅的代码/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2021-12-05 10:18:28 · 416 阅读 · 3 评论 -
leetcode236—二叉树的最近公共祖先(递归/深搜/理解)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中:最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”深搜,找到就返回,判断此时是否左右子树分别含p,q(或者root本身是p或者q)。因为如果pq存在一个子树时(例如都在左子树中),可能左子树结点才是最近公共祖先。画图,理解返回值的过程。引用 k神 的递归解析,(主要还是自己画)递归解析:终止条件:原创 2021-12-07 17:23:41 · 411 阅读 · 0 评论 -
Leetcode1302–层数最深叶子结点的和(深搜/递归)
给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和 。思路简单,注意到深度改变时,sum清零/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */struct TreeNode* dfs(struct TreeNode* root,int d原创 2021-12-08 11:23:03 · 280 阅读 · 0 评论 -
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。主要是想练习二分,用这个题目????可以遍历/可以等差数列求和比较/……int missingNumber(int* nums, int numsSize){ int mid; int low = 0; int high = numsSize-1; if(nums[low] == 1)原创 2021-12-08 11:28:11 · 158 阅读 · 0 评论 -
LeetCode1477-找两个和为目标值且不重叠的子数组
给你一个整数数组 arr 和一个整数值 target 。请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target 。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。请返回满足要求的最小长度和,如果无法找到这样的两个子数组,请返回 -1 。示例 1:输入:arr = [3,2,2,4,3], target = 3输出:2解释:只有两个子数组和为 3 ([3] 和 [3])。它们的长度和为 2动态规划数组含义:d[i]表示到编号i(不包含i)的情况下满原创 2022-01-06 22:17:42 · 848 阅读 · 4 评论 -
排序算法总结—时间复杂度O(n)—基数排序/计数排序小记
排序算法总结—时间复杂度O(n)—基数排序基数排序分为最高位优先和最低位优先的算法。找到最大值max,求出max的位数。在max位数max—length进行循环max-length趟。对于每一位进行排序,对于一个数字要会从低位一位一位取值,合理使用/10,%10。(对于大于0的数据范围,通常是10位,如果数据中有负数,要取19位。开辟一个计数数组count,对于出现几次就对应的数字count+1。count对应的直接就是该数字对应的下标(后序放入数组),当后序放入数组时,我们将同样的数字对应的原创 2021-11-26 09:08:07 · 618 阅读 · 0 评论 -
二叉树的前序/中序/后序遍历—采用递归与迭代两种方法实现嗷
二叉树的前序/中序/后序遍历—采用递归与迭代两种方法实现(以leetcode二叉树遍历为例题)前序遍历递归算法/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; *//** * Note: The returned array must be malloc原创 2021-11-26 09:10:40 · 678 阅读 · 0 评论 -
排序算法总结—时间复杂度O(n^2)—冒泡/插入/选择小记
排序算法总结—时间复杂度O(n^2)—冒泡/插入/选择小记冒泡排序最基础的排序,一层一层将最大值或最小值放到该去的位置。适用于顺序存储和链表存储时间复杂度:O(n^2)空间复杂度:O(1)稳定的排序算法产生的有序子序列全局有序,每次有一个元素放到最终的的位置上。移动零例题:给定一个数组 nums ,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。void moveZeroes(int* nums, int numsSize){ // if(numsSize原创 2021-11-24 17:42:15 · 1235 阅读 · 0 评论 -
C语言实现双轴快排—例题leetcode 912(手敲
c语言实现双轴快排—例题leetcode912之前拿冒泡插入写的时候忘记复杂度很高了,白写了后来用希尔/快速排序等又实现了一遍,上一篇博客里附两种代码看快速排序的时候就猜我们会考一下双轴快排,所以了解一下原理,手动敲了一遍,用leetcode排序数组验证了一下。除了时间很长,空间占用还很大,估计没啥别的问题(可是我还优化了QAQ)下面????开始讲思路:对比单轴快速排序, 每次找到一个枢轴,大的放后边,小的放前边,直到left和right相遇,再将枢轴与中间值(就是代指枢轴那个数字应该呆的位置)原创 2021-11-24 17:26:45 · 1170 阅读 · 4 评论 -
leetcode排序算法总结—时间复杂度o(nlogn)-希尔/堆排/快排/归并小记
排序算法总结—时间复杂度O(nlogn)—希尔/堆排序/快排/归并希尔排序有一段间隔的排序,可以逐个子表进行排序,然(例如王道)都给出便于计算机进行连续访问的程序算法,即依次按元素比较不同子表进行子表的调整。时间复杂度O(n^1.3) 最坏情况下n方空间复杂度O(1)不稳定适用于线性表为顺序存储。数组排序例题:给你一个整数数组nums,请你将该数组升序排列。/*** Note: The returned array must be malloced, assume caller cal原创 2021-11-18 16:44:19 · 1054 阅读 · 2 评论 -
LeetCode二维数组例题(原地旋转和对角线遍历)-c语言
数组二维数组 矩阵旋转(原地旋转)二维数组 矩阵旋转(原地旋转)1.四个角是一个循环,引申到四个块是循环n为偶数时,枚举n2/4个位置n为奇数时,枚举(n2-1)/4个位置void rotate(int** matrix, int matrixSize, int* matrixColSize) { for (int i = 0; i < matrixSize / 2; ++i) { for (int j = 0; j < (matrixSize + 1) /原创 2021-10-30 16:04:41 · 552 阅读 · 0 评论