![](https://img-blog.csdnimg.cn/20191210222741787.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
C++编程
moonbaby1
记录学习
展开
-
剑指offer(49)、力扣(8)--字符串转整数
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0python实现import sysclass Solution: def StrToInt(self, s): # write code here if not s: return原创 2020-08-28 09:29:31 · 106 阅读 · 0 评论 -
vector初始化
1.vector<int> arr;默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。2.vector<int> arr = {1,2,3.0,4,5,6,7};vector<int> arr {1,2,3.0,4,5,6,7};3.vector<int> arr2(arr1);vector<int&.转载 2020-08-25 21:32:07 · 653 阅读 · 0 评论 -
力扣103--二叉树的锯齿形遍历
题目描述给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。分析思路双端队列def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] q=collections.deque() q.append(root) mar原创 2020-08-16 22:49:03 · 292 阅读 · 0 评论 -
力扣124-二叉树的最大路径和
题目描述给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。输入输出思路分析二叉树后序遍历问题。节点的最大贡献值等于节点值与其子节点中的最大贡献值之和(对于叶节点而言,最大贡献值等于节点值)。空节点的最大贡献值等于0。节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值,如果子节点的最大贡献值为正,则计入该节点的最大路径和,否则不计入该节点的最大路径和。维护一个全局变量.原创 2020-08-14 17:49:21 · 243 阅读 · 0 评论 -
剑指offer(22)--删除链表中重复元素
目录题型一(不保留重复节点)C++:python:题型二(保留重复节点)题型一(不保留重复节点)题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路分析遍历节点不为空时,当p节点和它下一个节点的值相同时,q从p开始,q遍历所有相同的节点。删除从p到q,不保留重复节点,需要p之前设pre节点。具体原创 2020-06-23 11:58:56 · 180 阅读 · 0 评论 -
剑指offer(21)--圆圈中最后剩下的数(约瑟夫环问题)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试原创 2020-06-22 22:33:50 · 96 阅读 · 0 评论 -
剑指offer(20)--两个链表第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点思路分析:两个单向链表有公共结点,那么从某一结点开始,后面都指向同一结点。1.先分别遍历一次得到两个链表长度2.较长的链表先走l1-l2或者l2-l1步3.再同时在两个链表遍历,相遇时即是公共结点实现代码ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { int l1=0,l2=0,l; ListNode* p1=pHead1; Lis原创 2020-06-22 21:26:32 · 89 阅读 · 0 评论 -
剑指offer(19)--合并两个排序的链表
考点:单链表、递归题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。1.非递归实现(迭代)需要新建一个虚拟头节点如果pHead1->val<pHead2->val,把pHead1给cur->next,pHead1走一步指向下一个结点,同时cur也走下一步下一个结点;否则,pHead2同样操作。直到pHead1或pHead2有一个为空,接在cur后面即可。 ListNode* Merge(ListNod原创 2020-06-19 23:14:19 · 139 阅读 · 0 评论 -
剑指offer(18)--反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。思路分析设置两个next节点和pre节点首先将pHead->next暂存给next节点 反转链表指向,让pHead->next指向pre pre和pHead一起走到下一个节点,把pHead给pre,再把next给pHead 返回pre具体实现C++ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL) retu原创 2020-06-18 22:18:26 · 108 阅读 · 0 评论 -
剑指offer(17)--链表倒数第k个结点
考点:链表题目描述输入一个链表,输出该链表中倒数第k个结点。思路解析快慢指针:快慢指针初始为头节点。快指针先走k-1步,到达第k个节点。此时慢指针相对快指针是倒数第k个节点。此时快慢指针一起走,当快指针到达最后一个节点时,慢指针位于倒数第k个节点。如K为3,则pA先走2步,先到第3个节点。pA、pB一起走。当pA到最后一个节点时,pB到倒数第3个节点c++实现ListNode* FindKthToTail(ListNode* pListHead, unsigned int原创 2020-06-18 21:36:58 · 98 阅读 · 0 评论 -
C++string常用函数总结
1.string为空时写法if(string.size()==0)2.常用函数string类提供了一系列针对字符串的操作,比如:1.size()和length()--返回string对象的字符个数,他们执行效果相同2.push_back() --尾插一个字符3.insert()-- 插入字符,insert(pos,char):在制定的位置pos前插入字符char4.append()--拼接字符串,在字符串的末尾添加字符5.sort(s.begin(),s.end())--st..原创 2020-06-16 16:47:12 · 825 阅读 · 0 评论 -
剑指offer(16)--机器人的运动范围
考点:回溯法回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。以深度优先的方式搜索解空间。回溯法非常适合由多个步骤组成的问题,并且每一步都有多个选项。本题不用回退,较为简单。主要应用深度优先的方式遍历二维空间题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人原创 2020-06-10 22:07:42 · 132 阅读 · 0 评论 -
c++字符串(string、char*)
目录一.string、char*类型求字符串长度二.string、char*类型判断是否为空一.string、char*类型求字符串长度1.string类型用:string.size()和string.length()--返回string对象的字符个数,他们执行效果相同2.char*类型用strlen()函数:strlen(char*)--检测字符串实际长度。如:ch...原创 2020-04-10 12:52:28 · 1363 阅读 · 0 评论 -
剑指offer(15)--数组中的逆序对
考点:归并排序、逆序对题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路分析这是一个归并排序的过程,主要考虑合并两个有序序列时,计算逆序对。逆序对,前面数字大于后面数字,相当于研究右边有多少比左边当前数小。对于两个升...原创 2020-03-14 23:43:44 · 200 阅读 · 0 评论 -
剑指offer学习笔记(14)--第一个只出现一次的字符
目录考点:哈希表、ASCⅡ、字符串知识点(ASCⅡ码)题目描述思路分析实现代码考点:哈希表、ASCⅡ、字符串知识点(ASCⅡ码)1.ASCⅡ码共有256个字符ASCⅡ码占用一个字节,可以有0~255共256个取值。前128个为常用的字符如运算符,字母 ,数字等 键盘上可以显示的后 128个为特殊字符是键盘上找不到的字符。2.具体介绍0~31及127(共33个...原创 2020-03-10 16:50:36 · 122 阅读 · 0 评论 -
剑指offer学习笔记(13)--把数组排成最小的数
目录考点:字符串排序、数值转换为字符串(to_string()函数)知识点:题目描述思路分析实现代码1.选择排序思路2.sort函数排序考点:字符串排序、数值转换为字符串(to_string()函数)知识点:1.C++中 to_string()函数函数原型:string to_string (int val);string to_string (lo...原创 2020-03-03 23:11:47 · 134 阅读 · 0 评论 -
C++ vector常用函数总结
一.概念向量(Vector)是一个封装了动态大小数组的顺序容器,能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二.常用函数1.增加函数void push_back(const T& x):向量尾部增加一个元素X2.删除函数void pop_back():删除向量中最后一个元素void clear():清空向量中所有元素3.判断...原创 2020-03-02 17:04:39 · 5584 阅读 · 1 评论 -
剑指offer学习笔记(12)--字符串的排列
考点:回溯、字符串、全排列、递归知识点string类提供了一系列针对字符串的操作,比如:1. append() -- 在字符串的末尾添加字符 2. find() -- 在字符串中查找字符串 4. insert() -- 插入字符 5. length() -- 返回字符串的长度 6. replace() -- 替换字符串 7. substr() -- 返回某个子字符...原创 2020-03-01 22:03:34 · 108 阅读 · 0 评论 -
剑指offer学习笔记(11)--树的子结构
考点:二叉树的遍历、鲁棒性题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析思路第一步,遍历要判断A,B的根节点值是否一样。写一个方法来遍历大树,找到一个和小树根节点值相等的节点。若找到,则调第二步。此处需要设一个中间变量result,若经过第二步返回false,须继续递归遍历大树。第二步,传入两棵根节点值相同的树,判断...原创 2020-02-03 19:57:03 · 66 阅读 · 0 评论 -
剑指offer学习笔记(10)--二叉树的镜像
考点:二叉树、前序遍历、递归题目描述操作给定的二叉树,将其变换为源二叉树的镜像。分析思路二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \...原创 2020-02-03 17:08:37 · 96 阅读 · 0 评论 -
剑指offer学习笔记(8)--包含min函数的栈
考点:C++栈和队列标准库函数、实现特殊栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。知识点1.栈在栈中应包含头文件:#include< stack >定义: stack< int > s;s.empty(); //如果栈为空则返回true, 否则返回f...原创 2020-01-10 21:57:29 · 84 阅读 · 0 评论 -
剑指offer学习笔记(7)--转换二叉搜索树为双向链表
考点:二叉搜索树、中序遍历、双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。如图一个二叉树转换成排序的双向链表思路分析在搜索二叉树中,左节点的值总小于父节点,右节点的值总大于父节点;按中序遍历树的节点,得到的序列刚好是从小到大有序的。二叉树有两个指向子节点的指针,双向链表也是两个指针,一个向前,一...原创 2020-01-04 22:24:42 · 94 阅读 · 0 评论 -
剑指offer学习笔记(6)--复杂链表的复制
考点:链表节点的复制、插入、删除题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)分析思路在不使用辅助空间情况下实现O(n)时间效率。建设原始链表如下第一步,根据原始链表每个节点N创建其复制节点N’。(先...原创 2019-12-26 21:54:20 · 75 阅读 · 0 评论 -
剑指offer学习笔记(5)--栈的压入弹出序列
考点:根据栈的压入顺序判断序列是否栈的弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析思路本题的关键是建立一个...原创 2019-12-23 22:52:05 · 83 阅读 · 0 评论 -
剑指offer学习笔记(4)--二叉树和为某值的路径
考点:理解递归调用的本身是压栈出栈的过程题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。分析思路路径总是从根节点开始,在树的前序、中序、后序遍历中选前序遍历。每访问一个节点,把当前节点添加到路径中保存下来,一直到叶子节点...原创 2019-12-18 23:23:46 · 69 阅读 · 0 评论 -
剑指offer学习笔记(3)--根据后序遍历判断是否二叉搜索树
考点:二叉搜索树、后序遍历题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。如数组{5,7,6,9,11,10,8}是如下二叉树的后序遍历,是二叉搜索树。知识点复习1.特殊二叉树:(1)满二叉树:二叉树中,所有分支都有左右孩子,且叶子节点在同一层(2)完全二叉树:编号为...原创 2019-12-17 23:09:59 · 382 阅读 · 0 评论 -
剑指offer学习笔记(2)--斐波那契数列
考点:斐波那契数列定义如下:题目一斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。1.递归方式实现int Fibonacci(int n){ if(n<=0) return 0; if(n==1) return 1; return Fibonacci(n-1)+Fib...原创 2019-12-12 21:25:41 · 119 阅读 · 0 评论 -
剑指offer学习笔记(1)--按层遍历二叉树
考点:按层遍历二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析思路:此题实质考查二叉树的遍历,只是不是常见的前序、中序、后序遍历。考查的数据结构是队列(先入先出)。从根节点开始,先入队;若该节点有子节点,依次从左到右入队。接下来,打印队头最早进入队列的节点,队头后移,重复刚才的操作。比如下面二叉树,按层打印顺序为:8,6,10,5,7,9,11...原创 2019-12-10 23:14:18 · 196 阅读 · 0 评论