牛客网刷题
刷题咯
saomanchum
这个作者很懒,什么都没留下…
展开
-
剑指:3.4代码的鲁棒性22-26
代码的鲁棒性如果输入的是一个指针,那么如果指针为空会怎么样如果输入的是一个字符串,那么字符串为空会怎么样例题题目描述输入一个链表,输出该链表中倒数第k个结点。22 链表中倒数第k个节点解题思路我们知道这里要用两个指针因为要找到倒数第k个节点,也就是顺数第n-k+1个节点。前面的pBefore指针要比后面的指针pBehind超前k-1个指针(第k个指针)0~k-1鲁棒性...原创 2020-02-21 11:32:57 · 112 阅读 · 0 评论 -
剑指3.3_17-21
17.打印从1到最大的n位数两种解题思路:普通解题思路模拟整数的加法:需要一个n+1长度的字符串,因为字符串最后一位要补’\0’。这个函数需要注意判断是否已经是最大一位,是否溢出。把表达的字符串打印出来...原创 2020-02-20 01:50:17 · 80 阅读 · 0 评论 -
剑指3.3:代码的完整性
代码的完整性知识点检查功能测试:基本功能边界测试:输入边界值是否可以得到正确的输出负面测试:不合规范的非法输入是否做出了合理的错误处理三种处理方法返回值全局变量异常例题面试题16:数值的整数次方要考虑的:0和负数指数如果为0指数,返回1.如果为负指数,先计算正指数的结果,然后取倒数如果求0的指数,且指数是负数,则会出现求0的倒数,会出错。——所以我们要...原创 2020-02-13 23:52:28 · 74 阅读 · 0 评论 -
位运算
五种运算与,或,异或,左移和右移其他有一种题型:在微软产品Excel中,用A表示第1列,B表示第2列…AA表示第27列,…以此类推。这种题的本质时把十进制数字用A~Z表示为26进制,然后解决问题。面试题15:二进制中1的个数如果单纯地进行右移计算,这样有可能会引起死循环(负数)常规解法: 把n和1做与运算,判断最低为是不是1;然后1进行左移,对第二位进行判断以此类推:循环的次数等于...原创 2020-02-06 11:49:14 · 80 阅读 · 0 评论 -
剑指2.4.4 动态规划和贪婪算法
动态规划特点求一个问题的最优解整体的最优解依赖各小问题的最优解存在相互重叠的小问题从上往下分析问题,从下往上解决问题贪婪算法特点每一步都可以做出一个贪婪的选择如何证明这种贪婪的选择是正确的面试题14: 剪绳子动态规划整体问题最优解,求长度为n的绳子的最优解f(n)整体最优解依赖小问题的最优解,f(n)=max(f(n-i)*f(i))存在相互重叠的问题:如f(...原创 2020-02-06 11:23:38 · 80 阅读 · 0 评论 -
剑指基础:2.4算法
递归和循环1. 斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解法:递归class Solution {public: int Fibonacci(int n) { if(n<=0) return 0; if(n==1...原创 2020-02-05 22:23:12 · 70 阅读 · 0 评论 -
剑指2.4.2 查找和排序
查找顺序查找,二分查找,哈希表查找,二叉树查找后面都会遇到如果面试题要求在排序的数组(或部分排序)中查找一个数字活着统计某个数字出现的次数,尝试使用二分查找排序后面再总结(我是真的懒死了)题目11题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,...原创 2020-02-05 22:15:14 · 61 阅读 · 0 评论 -
剑指2.4.3回溯法
简单介绍回溯法可以看作蛮力法的升级版。问题的每一步都有不同的选择,我们在某一步选择了其中一个选项,就进入下一步,然后又面临新的选项。如果到某一项选择当我们到达某一个节点时,尝试所有可能的选项并在满足条件的前提下递归地抵达下一个节点。...原创 2020-02-05 15:27:12 · 85 阅读 · 0 评论 -
剑指基础:栈和队列
用两个栈实现队列用两个栈stack1 和 stack2插入时,直接push进stack1弹出时,如果stack2不为空,直接弹出stack2的顶部元素;若stack2为空,则将stack1的元素逐个压入stack2。补充c++ stl栈stack的成员函数介绍操作 比较和分配堆栈empty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size()...原创 2020-02-02 16:04:03 · 85 阅读 · 0 评论 -
剑指:二叉树的下一节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解题思路这道题主要考察的是对中序遍历的熟悉程度。考虑三种情况如果该节点有右子树,则它的下一个节点应该在其右子树的最左子节点。如果该节点没有右子树,且其为其父节点的左子树,则其下一个节点为其父节点如果该节点没有右子树且为父节点的右子树,则回溯他...原创 2020-01-29 23:10:45 · 79 阅读 · 0 评论 -
剑指:重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路在前序序列中,第一个数为root节点,而紧接着的是左子树的root节点。在中序序列中,通过遍历找到root节点所在位置,因为在中序序列中ro...原创 2020-01-29 22:24:52 · 66 阅读 · 0 评论 -
牛客网4 从尾到头打印链表
解题思路:使用栈(先进后出的想法)/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public...原创 2020-01-17 14:23:30 · 73 阅读 · 0 评论 -
牛客网3 替换空格
class Solution {public: void replaceSpace(char *str,int length) { int count=0; int originalLength=0; if(str==nullptr||length<=0) return; int i=0; ...原创 2020-01-17 14:10:39 · 129 阅读 · 0 评论 -
数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。方法:若是允许修改数组,则可以按照以下的思路:由于数组中的数都是来自于0-n-1中的数字,数组大小为n,因此,如果我...原创 2020-01-08 22:55:21 · 116 阅读 · 0 评论