
c++
BATTERIA
这个作者很懒,什么都没留下…
展开
-
数字 1 的个数-耐心记录思路
解法一:思考每一位为1时有多少个数。遍历每一位,分三种情况讨论:1、当前位的数大于1时当前位取1时的所有范围内数的个数=该位左侧的可选数*该位右侧的可选数此时左侧的可选数是包含0的,例如n=21345,当前位为3,左侧的数为21,左侧的可选数即为21+1右侧的可选数每位都可以选0-9,则总计为10的(右侧位数)次方,21345的例子中右侧的可选数就为10的平方2、当前位的数等于0时和第一种情况类似,但是此时左侧的可选数是不包含0的。例如n=21345,当前位为3,左侧的数为21,..原创 2020-11-25 10:41:37 · 386 阅读 · 0 评论 -
参加考试的最大学生数-耐心记录思路
1349. 参加考试的最大学生数https://leetcode-cn.com/problems/maximum-students-taking-exam/给你一个m* n的矩阵 seats表示教室中的座位分布。如果座位是坏的(不可用),就用'#'表示;否则,用'.'表示。学生可以看到左侧、右侧、左上、右上这四个方向上紧邻他的学生的答卷,但是看不到直接坐在他前面或者后面的学生的答卷。请你计算并返回该考场可以容纳的一起参加考试且无法作弊的最大学生人数。学生必须坐在状况良好的座位...原创 2020-11-13 22:53:32 · 270 阅读 · 1 评论 -
剑指offer--顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 解析因为每顺时针打印一圈之后里面有时同样的情况,所以考虑使用递归来做。每次顺时针打印最外圈的数,再进...原创 2018-10-04 14:53:59 · 118 阅读 · 0 评论 -
剑指offer--二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解析每次判断一个结点的左右子树是否左边全小于结点,右边全大于结点,然后递归判断两个子节点的情况。每次选择的节点都是后序遍历的最后一个结点,也就是根节点。class Solution {public: void method...原创 2018-10-04 20:02:45 · 113 阅读 · 0 评论 -
剑指offer--二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 解析1.第一步,通过使用递归的深度优先遍历(DFS)将所有的根结点到叶子节点的路径放在二维数组结构中(vector<vector<int>>)。...原创 2018-10-06 11:15:22 · 309 阅读 · 0 评论 -
层次遍历数组建立二叉树
层次遍历数组建立二叉树约定:层次遍历数组中为空的结点记为0解析使用递归,检查每个结点的左右结点是否存在,存在即分配结点,并递归检查该结点。void insert(TreeNode *p, vector<int> temp, int t){ int length = temp.size(); if(t>=length)return; p-&...原创 2018-10-06 11:26:06 · 6553 阅读 · 2 评论 -
剑指offer--二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 解析我这个是不想动脑子的办法,最好还是在递归的过程中就完成指针的调整。void method(TreeNode* p, vector<TreeNode*> &temp){ if(p){ method(p->...原创 2018-10-06 20:49:36 · 122 阅读 · 0 评论 -
二叉树的三种非递归遍历整理
前序遍历void preOrder(TreeNode* p){ if(!p)return; TreeNode* t; t = p; stack<TreeNode*> nodes; nodes.push(t); while(!nodes.empty()){ t = nodes.top(); nodes....原创 2018-10-06 21:15:16 · 360 阅读 · 0 评论 -
剑指offer--字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解析这一题要用到全排列,我直接对原字符串进行了全排列,然后再排序去重即可。1.全排列的原理很简单,就是每次从数组中取走一个元素,...原创 2018-10-07 11:23:16 · 135 阅读 · 0 评论 -
剑指offer--数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 解析这道题就是计算数组的逆序数,在线代中学过这个概念,其实逆序数就等于冒泡排序的交换次数,可以从两者的概念中得知这一点。搞懂了归并排序这道题就简单了。下面的链接是讲归并...原创 2018-10-07 20:47:36 · 127 阅读 · 0 评论 -
剑指offer--树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解析1.本题我首先在pre1方法中对A树递归先序遍历寻找符合B树根结点的结点,2.然后在pre2方法中将上面求得的结点与B树一起进行递归先序遍历,若B树中有的结点,求得的结点的树中没有则返回false。若同时遍历到一个结点,但值不相同则返回false。若先序遍历完成后fla...原创 2018-10-03 22:58:14 · 432 阅读 · 0 评论 -
剑指offer--合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解析将两个链表排序插入vector数组中,再新建一条链表。这种方法需要新的空间,可以考虑将两个链表连起来,按数组顺序重新赋值,但是又会改变原来的两个链表,所以一开始的思路应该还行。class Solution {public: ListNode* Merge(ListNo...原创 2018-10-03 19:45:45 · 134 阅读 · 0 评论 -
剑指offer--反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。解析总是忘记边界值判断class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL)return NULL; if(pHead->next==NULL)return pHead; ...原创 2018-10-03 17:13:45 · 113 阅读 · 0 评论 -
STL——Standard Template Library
简介标准模版库(Standard Template Library,简称STL)是ANSI/ISO C++语言的库的一个重要组成部分。STL的组成部分如下。container 容器 iterator 迭代器 algorithm 算法 adapter 适配器 function object 函数对象 Con...原创 2018-08-25 10:36:48 · 387 阅读 · 0 评论 -
剑指offer--二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 绝望的思路想到使用二分法,直接从中心点查找,第二次变成1/4的矩阵继续查找中心点。写完才发现这个思路有问题,中心点查找完是只缩小1/4的面积,因此修改成了一个递归处理的方式,中心...原创 2018-10-01 15:52:46 · 183 阅读 · 0 评论 -
剑指offer--替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解析这题主要看使用的语言,我使用的c++,通过本题加深了对c++字符串的理解class Solution {public: void replaceSpace(char *str,int length) {...原创 2018-10-01 15:55:03 · 101 阅读 · 0 评论 -
剑指offer--重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解析算法描述很简单,用递归的方法解决,每次用前序找到根节点,然后根据中序找到左右子树的结点,接着分别对左右子树进行相同操作。贴上丑陋的代码,...原创 2018-10-01 20:14:11 · 393 阅读 · 0 评论 -
剑指offer--从尾到头打印链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。搞了半天不带头结点。 vector<int> printListFromTailToHead(ListNode* head) { ListNode* p = head; vector<int> a; while (p!=NULL) { ...原创 2018-10-01 20:15:58 · 148 阅读 · 0 评论 -
剑指offer--用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解析比较简单,仅记录一下。class Solution{public: void push(int node) { while(!stack2.empty()){ stack1.push(stack2.top()); ...原创 2018-10-02 14:26:00 · 113 阅读 · 0 评论 -
剑指offer--跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。初步思路思考当有零次跳2级时,一次跳2级,到number/2(向下取整)次跳2级时,正好总数奇数级和偶数级是跳法的公式都是一样的,总跳法为C(n,0)+C(n-1,1)+...+C(n-number/2,number/2)接着,按照这个思路编写了如下程序,一...原创 2018-10-02 16:21:05 · 140 阅读 · 0 评论 -
剑指offer--二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解析使用位运算效率高很简单。int NumberOf1(int n) { //计算int二进制表示的位数 int length = sizeof(n) * 8; int sum = 0; for(int i=0;i<length;++i){ if(...原创 2018-10-03 15:22:15 · 115 阅读 · 0 评论 -
剑指offer--链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解析可以先便利一遍求出链表总长,再遍历第二遍求出结点。或者定义两个指针,一个先遍历到第k个结点,再两个一起往后遍历,前一个为null时,后一个就是题目要求的结点。class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned ...原创 2018-10-03 16:53:57 · 161 阅读 · 0 评论 -
C++的内存空间--堆栈
前言——内存空间布局C++内存空间布局图标对照。segment meaning command-line arguments and environment variables 命令行参数和环境变量 stack 栈 heap 堆 bss 未初始化数据段 data 初始化数据段 text 正...原创 2018-08-23 16:37:28 · 3162 阅读 · 0 评论