![](https://img-blog.csdnimg.cn/20200504175048800.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++算法笔记
初学C++,实现人生癫疯、羊癫疯、麻癫疯。。。。
1byte ≠ 8bit
大家好,我是黑客,我本来想盗这个哥们的账号的。但是我看这老哥平时就是乐于分享,积极进取,尊老爱幼,与人为善,关键还长的帅,不禁泪水就模糊了双眼。真的,希望大家多多鼓励他,支持他,没事给他支付宝转点钱,激发他的创作热情,让世界充满爱。
展开
-
[Sorting Problem] 合并区间
leetcode 56,Merge Intervals,难度medium。0. 题干给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出:[[1,5]]解释: 区间 [1,4] 和 [4,原创 2020-10-28 20:04:13 · 250 阅读 · 0 评论 -
[Modified Binary Search] 搜索旋转排序数组
leetcode 33,Search in a Sorted Infinite Array,难度medium。Modified Binary Search,这个前缀更新改造过的二分相关题目。0.题干假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log原创 2020-09-01 20:28:58 · 212 阅读 · 0 评论 -
[Dynamic Programming] 最小路径和
leetcode 64,Minimum Path Sum,难度medium动态规划的定义可以参见Wiki。意思就是说可以通过拆分问题,通过递归的方式解决问题;就是说要自己找到一种对问题的观察角度,把问题分解,大问题分成小问题解决。0. 题干给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径原创 2020-08-19 14:24:19 · 169 阅读 · 0 评论 -
[Tree Depth First Search] 路径总和 III
leetcode 437、Path Sum III,难度medium0.题干给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8返回 3。和等于 8 的路径有:1.原创 2020-08-19 11:05:10 · 133 阅读 · 0 评论 -
[Tree Depth First Search] 路径总和 II
leetcode 113、Path Sum II,难度medium0. 题干给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,1. 代码class Solution {private: vector<vector<int>> ans; vector<int> t;public: void findPath(原创 2020-08-14 09:17:03 · 144 阅读 · 0 评论 -
[Tree Depth First Search] 路径总和
这个小分类:Tree Depth First Search(树上的DFS),更新深度优先搜索算法相关的题目leetcode 112 ,路径总和,难度easy0. 题干给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。1. 代码/**原创 2020-08-13 16:39:12 · 145 阅读 · 0 评论 -
[Tree Breadth First Search] N叉树的层序遍历
leetcode 429,N-ary Tree Level Order Traversal,难度medium;0. 题干给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个 3叉树 :返回其层序遍历:[[1],[3,2,4],[5,6]]说明:树的深度不会超过 1000。树的节点总数不会超过 5000。1. 代码/*// Definition for a Node.class Node {public: int val;原创 2020-07-27 19:46:41 · 178 阅读 · 0 评论 -
[Tree Breadth First Search] 二叉树的最小深度
leetcode 111、、Minimum Depth of a Binary Tree、难度easy0. 题干// 根结点(root)是树的一个组成部分,也叫树根。所有非空的二叉树中,都有且仅有一个根结点简介。 //它是同一棵树中除本身外所有结点的祖先,没有父结点。给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最小深度 2.1.原创 2020-07-26 16:44:48 · 137 阅读 · 0 评论 -
[Tree Breadth First Search] 二叉树的最大深度
leetcode 104、Maximum Depth of Binary Tree、难度easy0. 题干给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。1. 代码// 广度优先:使用队列class Solution {public: int maxDepth(TreeNode* root) {原创 2020-07-26 16:44:36 · 177 阅读 · 0 评论 -
[C++基础] 字符串后面添加字符
0. C++using namespace std; int main(){ string s="abcajdjhs"; string b="abcajdjhs"; char chr_add= 'h'; s=s+chr_add; cout<<s<<endl; cout<<b<<endl; return 0;}cosole输出如下:真是简单粗暴,直接原创 2020-07-24 19:21:05 · 10759 阅读 · 0 评论 -
[ACM入门] Z字形变换
leetcode 6, ZigZag Conversion, 难度medium0. 题干将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实原创 2020-07-24 19:20:54 · 458 阅读 · 0 评论 -
[Tree Breadth First Search] 二叉树的层平均值
leetcode 637,Average of Levels in Binary Tree,难度,easy0. 题干给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入:3/ 9 20/ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。提示:节点值的范围在32位有符号整数范围内。1. 代码(含注释)解题思路对二叉树进行广度优先遍历,遍历原创 2020-07-24 19:20:42 · 124 阅读 · 0 评论 -
[Tree Breadth First Search]二叉树的层次遍历 II
leetcode 107、Binary Tree Level Order Traversal II ,难度easy0. 题干给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],[[15,7],[9,20],[3]]1. 代码/** * Definition for a binary tree node. * struct TreeNode { *原创 2020-07-24 19:20:28 · 156 阅读 · 0 评论 -
[Tree Breadth First Search] 二叉树的锯齿形层次遍历
leetcode 103、Binary Tree Zigzag Level Order Traversal,难度medium0. 题干给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7]返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]1. 代码/** * Definition for a binary tree node. * str原创 2020-07-23 18:47:52 · 124 阅读 · 0 评论 -
[Tree Breadth First Search] 二叉树的层序遍历
leetcode 102,Binary Tree Level Order Traversal,难度 medium树上的BFS,Tree Breadth First Search这个标题更新,二叉树广度优先搜素算法处理的相关题目。DFS(Deep First Search)深度优先搜索,BFS(Breath First Search)广度优先搜索的区别如下图。0. 题干给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,nul原创 2020-07-20 21:09:37 · 334 阅读 · 0 评论 -
[In-place Reversal of a LinkedList] K个一组反转链表
leetcode 25,Reverse Nodes in k-Group,难度 hard0. 题干给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->原创 2020-07-13 19:14:29 · 121 阅读 · 0 评论 -
[In-place Reversal of a LinkedList] 反转链表II
0. 题干leetcode 92反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL1. 代码/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2020-07-13 08:59:26 · 113 阅读 · 0 评论 -
[In-place Reversal of a LinkedList] 反转链表
leetcode 2060. 题干反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?1. 解法一(双指针)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;原创 2020-07-09 17:38:39 · 134 阅读 · 0 评论 -
[Cyclic Sort] 找到所有数组中消失的数字
0. 题干leetcode 448:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]1. 代码将数组元素对应为索引的位置加n遍历加n后的数组,若数组元素值小于等于n,则说明数组下标原创 2020-06-13 16:34:46 · 264 阅读 · 0 评论 -
[Cyclic Sort] 缺失数字
0. 题干leetcode 268:给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?1. 题解解法1:排序后比对值和下标是否对应。class Solution {public: static bool cmp(const int&a原创 2020-06-13 16:22:44 · 210 阅读 · 0 评论 -
[ACM入门] 两个int类型的数值互换
0. 题干int 类型的两个数,a = 7, b = 9,不借用任何变量,将a和b的值互换,并打印输出:a = 9; b = 7主要是用异或的思想;1. 代码#include<iostream>//#include<algorithm> using namespace std;int main(){ int a=7; int b=9; a= a^b; b= a^b; a= a^b; cout&l原创 2020-06-13 16:22:28 · 238 阅读 · 0 评论 -
[ACM入门] 青蛙跳台阶问题
0. 题干一只小青蛙,每次跳台阶,他可以一下跳一个台阶,或者两个台阶,问假设有n个台阶,这只青蛙一共有多种跳的方法1. 分析解决列出一个台阶,1种方法;两个台阶,2种方法;3个台阶的时候,青蛙可以从第一个台阶跳上去,也可以从第二个台阶跳上去,所以等于1+2=3;依次类推s(n)=s(n-1)+s(n-2) (n>2)发现是一个斐波纳挈数列;代码如下:#include<iostream>#include<algorithm> using namespace原创 2020-06-09 20:11:38 · 646 阅读 · 0 评论 -
[Fast & Slow pointers] 返回环形链表开始入环的第一个节点
0. 题干给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos =原创 2020-05-29 18:59:05 · 204 阅读 · 0 评论 -
[Fast & Slow pointers] 判断链表是否有环-快慢指针
0. 题干leetcode 141. 循环链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:原创 2020-05-29 18:58:43 · 268 阅读 · 0 评论 -
[Sliding window] 水果成篮-双指针
0. 题干leetcode 904:在一排树中,第 i 棵树产生 tree[i] 型的水果。你可以从你选择的任何树开始,然后重复执行以下步骤:把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。移动到当前树右侧的下一棵树。如果右边没有树,就停下来。请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。你有两个篮子,每个篮子可以携带任何数量的水果,但你希望每个篮子只携带一种类型的水果。用这个程序你能收集的水原创 2020-05-29 18:50:34 · 229 阅读 · 0 评论 -
[Two Points] 带有K个不同字符的最长子字符串
0. 题干找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。示例 1:输入:s = “aaabb”, k = 3输出:3最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。示例 2:输入:s = “ababbc”, k = 2输出:5最长子串为 “ababb” ,其中 ‘a’ 重复了 2 次, ‘b’ 重复了 3 次。1. 代码如下,很详细的写了注解class Solution {public:原创 2020-05-13 21:46:42 · 352 阅读 · 0 评论 -
[Sliding window] 最大子序和
0. 题干Maximum Sum Subarry of Size K (easy)给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的...原创 2020-05-07 08:29:18 · 188 阅读 · 0 评论 -
[C++基础] sort函数使用方法
1. 从大到小排序#include<iostream>#include<algorithm> //调用sort函数using namespace std; bool compare(int a, int b){ //从大到小排序 return a > b;} int main(){ int a[10] = {9,6,3,8,5,2,...原创 2020-05-07 08:23:08 · 268 阅读 · 0 评论 -
[Greedy Algorithm] K 次取反后最大化的数组和
0. 背景leetcode id :1005, K 次取反后最大化的数组和给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然...原创 2020-05-07 08:22:30 · 144 阅读 · 0 评论 -
[C++基础] C++数组默认值
1 .作为局部变量.默认都为0,同时编译器给了好多抱怨,说你没初始化数组;若是再给第一个赋值为1,其他也还是都为0(这就是废话,反正晓得默认为0了)作为全局变量默认都为0,而且没有抱怨.本文OVER,感谢阅读!...原创 2020-05-04 18:11:38 · 4130 阅读 · 0 评论 -
[C++基础] 在线C++编译器推荐
不逼逼,直接上链接,最近在学习C++,这个网站不错:https://wandbox.org/原创 2020-05-04 17:55:50 · 389 阅读 · 0 评论