- 博客(43)
- 收藏
- 关注
原创 设计最小栈问题 c++
-> 返回 -3.minStack.getMin();--> 返回 -2.minStack.top();操作,并能在常数时间内检索到最小元素的栈。将元素val推入堆栈。获取堆栈中的最小元素。删除堆栈顶部的元素。获取堆栈顶部的元素。
2024-08-16 20:57:54
101
原创 最后一个单词的长度 简单字符串问题
由若干单词组成,单词前后用一些空格字符隔开。是指仅由字母组成、不包含任何空格字符的最大子字符串。最后一个单词是长度为 6 的“joyboy”。最后一个单词是“World”,长度为 5。最后一个单词是“moon”,长度为 4。十分简单,直接反向遍历。
2024-08-15 21:23:23
201
原创 数组中的第K个最大元素 三种方式
第三种虽然看上去更复杂,但是时间复杂度最小。请注意,你需要找的是数组排序后的第。使用priority_queue排序。你必须设计并实现时间复杂度为。个最大的元素,而不是第。使用sort直接排序。
2024-08-15 21:19:20
359
原创 有效的括号 C++栈解决
s = "()"truetrues = "(]"falsepublic:{'}', '{'}stk.pop();else。
2024-08-14 23:29:25
223
原创 长度最小的子数组 滑动窗口法(双指针) 解决
暴力法是最直观的方法。初始化子数组的最小长度为无穷大,枚举数组 nums 中的每个下标作为子数组的开始下标,对于每个开始下标 i,需要找到大于或等于 i 的最小下标 j,使得从 nums[i] 到 nums[j] 的元素和大于或等于 s,并更新子数组的最小长度(此时子数组的长度是 j−i+1)。如果不存在符合条件的子数组,返回。是该条件下的长度最小的子数组。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。
2024-08-13 22:52:43
528
原创 最小栈问题
对于栈来说,如果一个元素 a 在入栈时,栈里有其它的元素 b, c, d,那么无论这个栈在之后经历了什么操作,只要 a 在栈中,b, c, d 就一定在栈中,因为在 a 被弹出之前,b, c, d 不会被弹出。因此,在操作过程中的任意一个时刻,只要栈顶的元素是 a,那么我们就可以确定栈里面现在的元素一定是 a, b, c, d。当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中;在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中。
2024-08-13 22:48:03
193
原创 三数之和 双指针解决+优化
当 nums[frist] > 0 时直接break跳出:因为 nums[third] >= nums[second] >= nums[frist] > 0,即 3 个元素都大于 0 ,在此固定指针 frist 之后不可能再找到结果了。当s == 0时,记录组合[frist, second , third]至ans,执行frist ++和third --并跳过所有重复的nums[second]和nums[third],防止记录到重复组合。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。
2024-08-12 22:11:48
742
原创 盛最多水的容器
如果我们移动数字较大的那个指针,那么前者「两个指针指向的数字中较小值」不会增加,后者「指针之间的距离」会减小,那么这个乘积会减小。因此,我们移动数字较大的那个指针是不合理的。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。直觉告诉我们,应该移动对应数字较小的那个指针(即此时的左指针)。在初始时,左右指针分别指向数组的左右两端,它们可以容纳的水量为 min(1,7)∗8=8。我们先从题目中的示例开始,一步一步地解释双指针算法的过程。容纳的水量是由两个指针指向的数字中较小值∗指针之间的距离。
2024-08-11 22:43:29
460
原创 只出现一次的数字 II
你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。请你找出并返回那个只出现了一次的元素。外,其余每个元素都恰出现。
2024-08-10 21:49:22
391
原创 两数之和Ⅱ——输入有序的数组
1 与 0 之和等于目标数 -1。因此 index1 = 1, index2 = 2。返回 [1, 2]。因此 index1 = 1, index2 = 2。返回 [1, 2]。2 与 4 之和等于目标数 6。因此 index1 = 1, index2 = 3。返回 [1, 3]。仔细看了一下题,看到是排了顺序的,第一想到是二分查找,觉得有点麻烦,就想到双指针,本质和二分差不多。看到这个题第一想法是两个循环,将数组加一遍,写下来后测试用例最后一个过不了,时间超了。
2024-08-10 21:34:36
235
原创 超简单适合练手的双指针题:判断子序列
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。给定字符串 s 和 t ,判断 s 是否为 t 的子序列。十分简单无需思路直接上代码。
2024-08-09 21:56:23
365
原创 验证回文串
字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串。"amanaplanacanalpanama" 是回文串。在移除非字母数字字符之后,s 是一个空字符串 ""。如果在将所有大写字符转换为小写字符、并移除所有非字母。由于空字符串正着反着读都一样,所以是回文串。吐槽示例中竟然没有数字,题目又有,简直坑人。"raceacar" 不是回文串。(一开始根本没看到数字两个字)字母和数字都属于字母数字字符。,如果它是 回文串 ,返回。
2024-08-08 20:57:19
429
原创 罗马数字转整数 C++
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。(1000) 的左边,来表示 400 和 900。(100) 的左边,来表示 40 和 90。(10) 的左边,来表示 4 和 9。给定一个罗马数字,将其转换成整数。字符 数值。,即为两个并列的 1。
2024-08-07 21:52:01
412
原创 经典加油站问题
3.若 curSum 小于零,说明[0,i]区间都不能作为起始位置,起始位置从 i+1 算起,curSum 清零重新计算。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油。开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油。开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。你有一辆油箱容量无限的的汽车,从第。
2024-08-06 21:30:25
522
原创 字符串的相加
你不能使用任何內建的用于处理大整数的库(比如。), 也不能直接将输入的字符串转换为整数形式。,计算它们的和并同样以字符串形式返回。给定两个字符串形式的非负整数。
2024-08-06 19:53:47
269
原创 除自身以外数组的相乘 C++
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。之外其余各元素的乘积。请 不要使用除法,且在。时间复杂度内完成此题。题目数据 保证 数组。
2024-08-05 23:05:42
364
原创 H 指数 C++简单解法
篇论文被引用的次数。计算并返回该研究者的。被引用了 3 次,其余两篇论文每篇被引用。代表“高引用次数” ,一名科研人员的。篇论文,每篇论文相应的被引用了。由于研究者有3 篇论文每篇。指数 是指他(她)至少发表了。篇论文被引用次数大于等于。篇论文,并且 至少 有。指数 是其中最大的那个。给定数组表示研究者总共有。
2024-08-04 22:24:49
391
原创 跳跃游戏Ⅱ C++简单代码
从下标为 0 跳到下标为 1 的位置,跳。向前跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。的 0 索引整数数组。处,你可以跳转到任意。
2024-08-03 23:01:50
382
原创 跳跃游戏 C++简单解法
你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。给你一个非负整数数组。
2024-08-02 23:23:31
234
原创 写了一个C解决 leetcode买卖股票的最佳时机问题,感觉自己写的应该有点问题,但是oj给我过了
return 0;int ans=0;i++)return ans;
2024-07-31 22:10:07
303
原创 轮转数组(由于看不懂环状替代直接使用额外数组遍历)
根据规则,位置 0 的元素会放至 (0+k)modn 的位置,令 x=(0+k)modn,此时交换 temp 和 nums[x],完成位置 x 的更新。因此,我们有 an=bk,即 an 一定为 n,k 的公倍数。又因为我们在第一次回到起点时就结束,因此 a 要尽可能小,故 an 就是 n,k 的最小公倍数 lcm(n,k),因此 b 就为 lcm(n,k)/k。容易发现,当回到初始位置 0 时,有些数字可能还没有遍历到,此时我们应该从下一个数字开始重复的过程,可是这个时候怎么才算遍历结束呢?
2024-07-30 22:40:52
329
原创 多数元素---投票法
因为多数元素在数组里出现的次数绝对大于n/2,所以用不同元素消去相同元素,剩下的必然是相同元素。//该元素不是多数元素,更新投票对象candidate并把票数置1。,返回其中的多数元素。多数元素是指在数组中出现次数 大于。你可以假设数组是非空的,并且给定的数组总是存在多数元素。//投票对象相同,票数+1。//投票对象不同,票数-1。
2024-07-29 22:12:33
325
原创 C语言 计数排序
assert(a);i < n;i++)max = a[i];min = a[i];//统计次数i < n;i++)//排序j < range;j++)
2024-07-27 11:54:53
441
原创 可能简单的归并排序
将原始数组A[0:n-1]中的元素分成两个大小大致相同的子数组:A[0:n/2]和A[n/2+1:n-1],分别对这两个子数组单独排序,然后将已排序的两个数组归并成一个含有n个元素的有序数组。(不断地进行二分,直至待排序数组中只剩下一个元素为止,然后不断合并两个排好序的数组段)
2024-07-26 22:03:35
329
原创 非递归 快速排序
每次从栈中取出区间,进行分区操作,并将分区后的子区间压入栈中(如果需要)。printf("内存不足");//可参照本人上一篇文章,快速排序的三种方式任选一种。重复上述过程,直到栈为空,即所有区间都已处理完毕。//判断是否为空 返回1为空,返回0为非空。将递归过程中的函数调用转换为栈操作。//返回1为空,返回0为非空。
2024-07-26 19:55:31
430
原创 堆建立(自用)
int _size;}Heap;heap.c//构建堆i >= 0;--i)*p1 = *p2;*p2 = tmp;elsebreak;++child;elsebreak;
2024-07-23 22:47:13
386
原创 C语言 设计一个循环队列
在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。//rear-1是队尾,但是rear的位置可能为0,tail就为-1,此时需要重新定义tail。这里我通过一个数组进行模拟,通过操作数组的索引构建一个虚拟的首尾相连的环。为了区分空的情况和满的情况,我们设计的队列一定要保证一直空出一个位置。当然也可以使用链表指针连接。//malloc一个结构体。//malloc一个数组。//用模处理预防超出。//用模处理预防超出。
2024-07-21 22:39:31
991
原创 C语言:leetcode 环形链表的判断(快慢指针)——简单
我们定义两个指针,一快一慢。慢指针每次只移动 一 步,而快指针每次移动 两 步。初始时,快指针和慢指针位置都为。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。//因为快指针一次走两步,所以结束条件为fast或者fast->next。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。仅仅是为了标识链表的实际情况。,判断链表中是否有环。给你一个链表的头节点。
2024-07-21 22:08:08
584
原创 Leetcode只出现一次的数字III
思路:先将数组中每一个数异或一边再异或一个0由于 前提1 除了两个只出现1次的数字都会抵消,这时用 前提3 那么这个Bit1不是x就是y的,就可以利用这一位为1将原数组分为两组,再一次&全部的数字,就可以得到x或者y。3.x &-x 可以生成一个保留最右边 bit为1的数字,其他bit为0 x&(-x)=...0001...ret=ret&(-ret)//可能不过,可以加一个判断:ret =(ret== INT_MIN?2.异或两个相同的数,等于0,经常用于消除出现两次的数字 x^x=0。
2024-07-19 17:39:57
476
原创 C语言小游戏——扫雷
void fast(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y, int* count)//优化。//(2)不是雷 =统计坐标周围有几个雷=存储排查雷的信息到show,游戏继续。//存放排查出的雷的信息。printf("--------扫雷--------\n");printf("--------扫雷--------\n");//(1)是雷 =炸死=游戏结束。//不是雷,统计周围雷的个数。//显示排查出的信息。
2024-07-15 17:56:15
775
原创 初学C 三子棋
printf("当前位置已有棋,请重新输入\n");printf("坐标非法,请重新输入:\n");printf("选择错误,重新选择\n");printf("退出游戏\n");printf("请输入下棋坐标:");printf("玩家赢\n");printf("电脑赢\n");//判断坐标是否被占用。printf("平局\n");printf("请选择:");printf("玩家走:\n");printf("电脑走:\n");//判断玩家是否赢得游戏。//判断电脑是否赢得游戏。//储存数据-二维数组。
2024-07-15 12:22:54
323
原创 初学C语言:九九乘法表
int main()for (i = 1;i <= 9;i++)for (j = 1;j <= 9;j++)k = i * j;return 0;
2024-06-29 21:36:30
96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人