C++刷题
备战考博,记录每日刷题
青帆1998
不系明珠系宝刀
展开
-
连续子数组的最大乘积
连续子数组最大乘积原创 2022-06-25 09:55:18 · 1393 阅读 · 1 评论 -
BM34 判断是不是二叉搜索树
题目描述判断是否为二叉搜索树解题思路中序遍历,看结果是否单调递增。代码/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /** * 代码中的类名、方法名、参数名原创 2022-05-15 09:24:20 · 319 阅读 · 0 评论 -
BM22 比较版本号
题目描述牛客项目发布项目版本时会有版本号,比如1.02.11,2.14.4等等现在给你2个版本号version1和version2,请你比较他们的大小版本号是由修订号组成,修订号与修订号之间由一个"."连接。1个修订号可能有多位数字组成,修订号可能包含前导0,且是合法的。例如,1.02.11,0.1,0.2都是合法的版本号每个版本号至少包含1个修订号。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。解题思路模拟比较过程。将两个字符串按照 ‘.’ 分割开原创 2022-05-09 09:33:44 · 265 阅读 · 0 评论 -
BM19 寻找峰值
题目描述给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于2.假设 nums[-1] = nums[n] = -\infty−∞3.对于所有有效的 i 都有 nums[i] != nums[i + 1]4.你可以使用O(logN)的时间复杂度实现此问题吗?解题思路用二分法求解峰值问题。对于每一个位置,判断其两边的元素于他的大小。在比他大的那一侧一定存在峰值。原创 2022-05-06 15:01:53 · 214 阅读 · 0 评论 -
BM11 链表相加(二)
题目描述链表加法。解题思路模拟加法过程,先将两个链表进行 reverse,然后进行逐个相加。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: /** *原创 2022-05-04 09:15:54 · 557 阅读 · 0 评论 -
BM12 单链表的排序
题目描述列表排序,时间复杂度 O(nlogn)。解题思路看到列表排序和时间复杂度,直接归并。代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 the head node * @return ListNode类 */ ListNode原创 2022-05-03 09:06:16 · 469 阅读 · 0 评论 -
BM9 删除链表的倒数第n个节点
题目描述删除倒数第 n 个节点。解题思路双指针。代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ ListNode* removeNthF原创 2022-04-27 09:43:17 · 1607 阅读 · 0 评论 -
BM8 链表中倒数最后k个结点
题目描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。解题思路双指针。slow 指针和 fast 指针保持k的间距,当 fast 为 null 时slow即为答案。代码/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */c原创 2022-04-26 09:16:36 · 1515 阅读 · 0 评论 -
BM3 链表中的节点每k个一组翻转
题目描述将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。解题思路分段反转,边界处理。关键步骤写在注释了哈。代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNo原创 2022-04-24 15:17:40 · 445 阅读 · 0 评论 -
BM6 判断链表中是否有环
题目描述判断列表是否有环。结题思路计数法,根据输入规模设置最大值。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head原创 2022-04-23 16:26:33 · 918 阅读 · 0 评论 -
BM2 链表内指定区间反转
题目描述将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。解题思路找到开始反转的位置,然后调用反转列表。记住,因为调用反转列表没有考虑头和尾的问题,还需要将头尾单独处理一下,看代码。代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** *原创 2022-04-23 09:11:36 · 419 阅读 · 0 评论 -
牛客 BM1 反转链表
题目描述反转一个链表解题思路模板题,记住套路即可。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/#include<cstdlib>class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNode* pre =原创 2022-04-22 09:29:16 · 914 阅读 · 0 评论