LeetCode.
实战为主线,leetcode刷题为手段,在刷题中及时总结,巩固已学知识
可爱多咻雪糕
知道世界上最遥远的距离是什么吗?
那就是知道和做到。
展开
-
Leetcode349. 两个数组的交集 哈希表解法
①要找出两个数组的交集,只需要将第一个数组元素映射到hash表中,出现就将数组元素数值对应hash表下标的元素置为1(不管出现几次),结果就是hash表数值为1的元素下标代表着第一个数组出现过的数字;②然后依次遍历第二个数组,将数组元素数值对应hash表下标的元素为1,就代表第二个数组也出现第一个数组出现的元素,于是存入目标数组,并将该hash数字对应数值置0,避免重复存入目标数组;find()如果找到就返回该容器中元素的地址,如果找不到就返回和end()一样的地址。begin()返回容器第一个元素地址。原创 2023-06-03 18:28:07 · 534 阅读 · 0 评论 -
LeetCode645.错误的集合
题目给出一个数组,包含1-n的整数,其中只有一个数据出现了重复,因此我们可以利用哈希表的知识,创建一个大小为n+1的数组has【n+1】,遍历记录对应下标出现的次数。③再遍历一次数组has【n+1】,若has【k】=2,则为重复出现的整数,若has【k】=0,则为丢失的整数。①函数传进来一个数的指针int* returnSize,需要在函数体内对他进行赋值,意为返回数组的大小。②遍历数组nums,记录数组值出现的次数,即has【n+1】的下标对应数组值加1。函数返回值为指向填充后的内存块的指针。原创 2023-04-18 10:32:07 · 54 阅读 · 0 评论 -
283. 移动零
移动0原创 2023-03-09 13:09:55 · 40 阅读 · 0 评论 -
665. 非递减数列
非递减数组原创 2023-03-09 11:47:27 · 185 阅读 · 0 评论 -
453. 最小操作次数使数组元素相等(求对立事件)
看似困难实则算法简单原创 2023-03-07 11:12:08 · 70 阅读 · 0 评论 -
LeetCode21 - 合并两个有序链表
力扣21题C解法 暴力解法+递归调用原创 2022-11-30 20:21:55 · 173 阅读 · 0 评论 -
LeetCode 20.有效的括号 C语言
题目简单,不过题解的细节还是值得学习。一是s长度为奇数时可以直接排除。二是可以用哈希表实现快速配对(而不是写一堆switch和if else)。原创 2022-11-19 23:47:07 · 694 阅读 · 0 评论 -
LeetCode 14-最长公共前缀
LeetCode14题求最长公共前缀,使用C语言,利用数组遍历求解原创 2022-11-16 16:56:19 · 102 阅读 · 0 评论 -
LeetCode9 - 回文数
C语言 leetcode第9题利用数组解原创 2022-11-12 17:58:53 · 54 阅读 · 0 评论 -
LeetCode1-两数之和-暴力枚举
数组操作原创 2022-11-12 14:06:52 · 91 阅读 · 0 评论 -
leetcode 118. 杨辉三角 C语言 暴力模拟
题目分析题目把三角形里的元素放在二维数组里二维数组第i行有i+1个元素每一行的第0个和第i-1个都为1其余情况下nums[i][j]=nums[i-1][j-1]+nums[i-1][j];代码段int** generate(int numRows, int* returnSize, int** returnColumnSizes){ int i,j; int** nums=(int**)malloc(sizeof(int*)*numRow..原创 2022-05-17 23:48:13 · 171 阅读 · 0 评论 -
leetcode 53. 最大子数组和 C语言 动态规划
题目分析题目从第0项开始遍历数组,子数组尾端向后移动下标为i,求第i项之前的最大子数组和,如果每个数与前一个数的连续子数组和相加大于这个数本身,那么该数与前面一个子数组组成一个子数组,否则该数在下一次计算时以单独的数作为子数组,每计算出一个和放在一个数组元素里面,sum[0]:最大和为nums[0]sum[1]:若nums[1]+sum[0]>nums[1]; 则sum[1]=nums[1]+sum[0];否则sum[1]=nums[1];sum[i]:若nums[i]+原创 2022-05-14 22:53:56 · 573 阅读 · 0 评论 -
leetcode 70.爬楼梯 C语言 动态规划
题目分析题目这是典型的动态规划问题,每次可以爬1或2个台阶,让我们求爬到第n阶的方案数,有两种情况,情况一:从n-1阶爬上来。情况二:从n-2阶爬上来;只要把两种情况的方案数相加即可;因此求爬到第n阶的方案数就转换为求爬到第n-1阶和第n-2阶的方案数。运用动态规划设计状态:求第n阶的方案数就转移到求第n-1阶和第n-2阶的方案数写出状态方程:f(n)=f(n-1)+f(n-2);设定初始状态:f(0)=1; f(1)=1;执行状态转移返回最终解代码段i原创 2022-05-13 21:27:39 · 820 阅读 · 0 评论 -
leetcode 42.接雨水 C语言 动态规划
题目分析题目题目让我们求此排列柱子总共能接多少水,总共接的水等于每个柱子能接的水之和,因此只要求出每个柱子能接的水量就行了一个柱子能接的水量由他两旁高于他的柱子决定,而两侧最高的柱子中较小的柱子决定了柱子能接的最大水量求第i个柱子能接多少水就转化为求i项的前缀最大值和后缀最大值之间的较小值问题而第i个柱子的接水量等于较小值减去这个柱子的高度其中值得注意的是第i个柱子的前缀最大值或后缀最大值的较小值如果比第i个柱子还矮或者一样高的话,那么第i个柱子是不能接住水的(对一个柱子而言,原创 2022-05-11 23:21:11 · 312 阅读 · 0 评论 -
leetcode 1014. 最佳观光组合 C语言 动态规划
题目分析题目将所求部分分为两部分 values[i]+values[j]+i-j = (values[i]+i)+(values[j]-j)可以假定j是固定的,即(values[j]-j)是固定的,这里先不管j,题目中要求i<j,且要求和的最大值,就要求在区间[0,j)之间(values[i]+i)的最大便,求解问题就变成了在左闭右开前缀最大值的问题运用动态规划设计状态:求第i项前面的最大值(包含第i项)就转移到求【第i-1项之前的最大值(包含第i-1项)与第i项之间原创 2022-05-10 23:52:29 · 174 阅读 · 0 评论 -
leetcode 1299. 将每个元素替换为右侧最大元素 C语言 动态规划
题目读题求第i个数右侧的最大值,就需要求出在(i,n-1]之间的最大值,并把这个最大值赋给arr[i],求解问题便变成了求左开右闭后缀最大值的问题运用动态规划设计状态:求第i项之后的最大值(包含第1项)就转移到求[第i+1项之后的最大值(包含第i+1项)和第i项之间]的最大值写出状态方程:Rmix[i]=max(Rmix[i+1],a[i]);设定初始状态:Rmix[n-1]=a[n-1]; rmix[n-1]=-1;执行状态转移返回最终解..原创 2022-05-09 12:14:12 · 443 阅读 · 0 评论 -
leetcode 121.买卖股票的最佳时机 C语言 动态规划
题目读题求在第i天卖出的最大利润,就需要求出在[0,i-1]天之间的股票价格最小值,并返回两者之间的差值,求这个差值的最大值。求解返回便变成了左开右闭求前缀最小值的问题。运用动态规划设计状态:求第i项之前的最小值就转移到求(第i-1项之前的最小值和第i项之间)的最小值写出状态方程:premin[i]=min(premin[i-1],prices[i]);设定初始状态:premin[0]=price[0];执行状态转移返回最终解代码段int m.原创 2022-05-07 10:32:17 · 317 阅读 · 0 评论 -
leetcode 509.斐波那契数 C语言 动态规划
题目读题从第三项开始,每一项是前两项的和,给定数n,求F(n)。列出前五项 F(0) F(1) F(2) F(3) F(4) F(n) 0 1 1 2 3 F(n-1)+F(n-2) 1+0 1+1 2+1 运用动态规划设计状态:从第三项开始每一次求第n项都转移到求n-1项和n-2项写出状态转移方程:F(n)=F(n-1)+F(n-2原创 2022-05-06 22:39:27 · 1286 阅读 · 0 评论