
C++算法与数据结构
.Pking.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 17. 电话号码的字母组合
题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 思路 比较简单的一个回溯,有手就行。。。。 代码 class Solution { public: void getPhoneMap(unordered_map<char, string>& phoneMap) { phoneMap['2'] = "abc"; ph原创 2022-04-13 23:28:21 · 367 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历
题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 思路 有手就行 代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)原创 2022-04-12 21:59:19 · 522 阅读 · 0 评论 -
LeetCode 62. 不同路径
题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 思路 动态规划,滚动数组,有手就行。 代码 class Solution { public: int uniquePaths(int m, int n) { int dp[n]; for(int i=0;i<n;i++)原创 2022-04-11 16:26:29 · 668 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 输入:head = [1,2,3,4] 输出:[2,1,4,3] 思路 依旧双指针,有手就行 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(n原创 2022-04-11 14:49:01 · 104 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点(双指针问题)
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 思路 双指针中的快慢指针使用,有手就行 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} *原创 2022-04-11 12:12:19 · 253 阅读 · 0 评论 -
LeetCode 92. 反转链表 II
题目 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5] 思路 有手就行 代码 ListNode* reverseBetween(ListNode* head, int left, int right) { ListNode* tempNode原创 2022-04-09 22:24:08 · 388 阅读 · 0 评论 -
LeetCode 206. 反转链表
题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 思路 这题有手就行。。。 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int原创 2022-04-09 11:43:05 · 538 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器
题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 思路 双指针,两边逼近找出最大面积 代码 class Solution { public: int maxArea(vector<int>& height) { int max_water = 0;原创 2022-04-07 16:39:58 · 1058 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表
题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6 思路 暴力解法: 1.遍历所有链表,存入一个vect原创 2022-04-04 21:41:51 · 106 阅读 · 0 评论 -
LeetCode 15. 三数之和
题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 思路 先排序数组 参照快排,找出一个基准数(一般为左边第一个),然后定义两个指针分别指向基准数的右边一个和数组尾部; 如果基准数大于0,直接推出循环; 如果基准数小于0,判断基准数与两只指针数的和是否为0: 1:sum>0,右边界–; 2:sum<0,左边界++; 3:sum=0,存原创 2022-04-03 21:55:42 · 947 阅读 · 0 评论 -
LeetCode 64. 最小路径和(动态规划)
题目 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。 解题思路 一个简单的二维DP,一直第一步(左上角)的最短路径为grid[0][0],后面每一步都可以根据前面的数据计算出当前的最短路径。 代码 class Solution { public: int minP原创 2022-04-03 18:50:48 · 993 阅读 · 0 评论 -
LeetCode 42. 接雨水(动态规划)
题目 思路 class Solution { public: int trap(vector<int>& height) { int sum = 0; int size = height.size(); std::vector<int>forward; forward.push_back(0); int h0 = height.at(0); int h1 =原创 2022-03-30 22:42:18 · 299 阅读 · 0 评论 -
LeetCode 53. 最大子数组和(动态规划)
动态规划的基本思路 大事化小,小事化了,复杂问题分解为可重复的简单问题,找出简单问题的某些已知状态,通过重复的状态迭代求出复杂问题的解。 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。 示例一 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.原创 2022-03-29 23:10:06 · 170 阅读 · 0 评论 -
LeetCode 81. 搜索旋转排序数组 II
class Solution { public: bool forward(vector<int>& nums, int target) { int max = nums.at(0); for(int i=0;i<nums.size();i++) { if(nums.at(i)>=max) { max = nums.at(i);原创 2022-03-27 23:54:46 · 314 阅读 · 0 评论 -
LeetCode 153. 寻找旋转排序数组中的最小值
class Solution { public: int findMin(vector<int>& nums) { if(nums.size() == 1) return nums.at(0); if(nums.at(0) < nums.at(nums.size()-1)) return nums.at(0); int l = 0;原创 2022-03-27 23:53:10 · 286 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组
class Solution { public: int forward(vector<int>& nums, int target) { int max = nums.at(0); for(int i=0;i<nums.size();i++) { if(nums.at(i)>=max) { max = nums.at(i);原创 2022-03-27 23:51:41 · 488 阅读 · 0 评论 -
快速排序c++
快排的C++实现 int partition(std::vector<int>& arr, int left, int right) { int num = arr.at(left); while (left < right) { while (num >= arr.at(right) && (left < right)) { right--; } while (num < arr.at(left) &&am原创 2022-03-24 22:19:04 · 373 阅读 · 0 评论