
牛客网刷题
开始迷茫了
这个作者很懒,什么都没留下…
展开
-
从尾到头打印一个链表(牛客网)
1、思路一:利用递归实现class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int>res; if(head==NULL){ return res; } Li...原创 2018-05-22 17:56:30 · 594 阅读 · 0 评论 -
将数组中的奇数放在偶数前面,但是不改变奇数、偶数原来的排布(牛客网)
类比排序算法,左边为已经处理好的,右边是待处理的,用count来表示前一部分的奇数个数,如果count==k(当前下标)说明前面有一个偶数还需要调整#include<vector>#include<iostream>using namespace std;void reOrderArray(vector<int> &array){ i...原创 2018-05-31 11:48:17 · 1456 阅读 · 0 评论 -
【动态规划】数字和为sum的方案数
题目:给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。#include <iostream>using namespace std;int main(){ int num,sum; cin>>num>>sum; ...原创 2018-07-29 11:06:34 · 1517 阅读 · 0 评论 -
根据前序和中序遍历的结果构建二叉树
class Solution {public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int len1=pre.size(); int len2=vin.size(); if(len1==0||len2==0||len1!...原创 2018-07-27 09:52:47 · 352 阅读 · 0 评论 -
Given a singly linked list L: L 0→L 1→…→L n-1→L n, reorder it to: L 0→L n →L 1→L n-1→L 2→L n-2→…
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void reorder...原创 2018-08-03 22:12:48 · 856 阅读 · 0 评论 -
对一个链表进行排序,要求空间复杂度O(1),时间复杂度为O(N*logN)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *so...原创 2018-08-03 22:42:49 · 3788 阅读 · 0 评论 -
算法之机器人的行走范围
class Solution {public: int movingCount(int threshold, int rows, int cols) { if(rows<1||cols<1||threshold<0){ return 0; } bool* flag=new bool[rows...原创 2018-08-01 17:03:45 · 963 阅读 · 0 评论 -
给定一个有序(升序)单链表要求使用单链表来构建a height balanced BST.
由于单链表是升序的,我们就可以将此问题化简成把中间节点左边建成左子树,中间节点有半部分建成右子树的两个子问题(递归解决),但是这里非常要注意,我们不能像数组一样,那样的跑不过测试用例,(至于为什么,我还不知道,请大家为我解答)我们可以将链表断开形成两个单链表,在组装在一起就好了。 * struct TreeNode { * int val; * TreeNode *le...原创 2018-08-06 15:56:57 · 779 阅读 · 0 评论 -
给定一个数组,判断是不是某二叉搜索树的后序遍历结果
AC的代码:class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size()==0){ return false;//虽然说空树也是二叉树,但是在此处sequence大小为0,说明参数是错的 } ...原创 2018-08-12 17:40:50 · 646 阅读 · 0 评论 -
求数组中出现次数超过数组长度一半的元素(牛客网)
很多人拿到这道题就会想到利用一个计数器count,记录第一个元素value,将count=1;如果遍历数组遇到和value相等的count++,否则count–;int find(int* a, int n){ if (a == NULL){ return -1; } int value = a[0]; int count = 1; ...原创 2018-05-31 11:42:47 · 925 阅读 · 0 评论 -
找一个字符串中第一个只出现一次的字符(牛客网)
思路:普通思路就是先看第一个元素,遍历字符串看看每个字符总共在字符串中出现的次数,但是这是一个时间复杂度O(N)的算法,牛客上面是肯定跑不过的,所以我们可以想到用什么东西可以达到记录字符出现次数时间复杂度有符合要求的呢? 哈希表 这里是一个字符串,每个字符的取值范围不可能超过256,我们可以直接将哈希表定义出来并且初始化为全0,然后对应字符的ASCII存放在字符串中出现的次数,后面就...原创 2018-05-31 11:25:00 · 5573 阅读 · 0 评论 -
顺时针打印矩阵(牛客网)
思路:将左上和右下的坐标定位,依次旋转打印出数据,一次旋转后,就将坐标分别前进和后退一个单位,把要打印的数据范围缩小。 实现代码:class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { int left=0; ...原创 2018-06-04 15:23:27 · 451 阅读 · 0 评论 -
实现将字符串转换成整数atoi(牛客网)
思路:将所得到的字符串进行处理,将其处理成非法和合法 例如”++1234”,”–1234”,”+-1234”这些都是不合法的,因为常规来讲没有人会这样写一个数,所以我们就处理”-1234”,”+1234”,” 1234”此种类型的, 具体实现代码#include<string>#include<iostream>using namespace std...原创 2018-05-28 17:25:08 · 545 阅读 · 0 评论 -
将一个字符串把单词作为一个整体的逆置例如"i am happy"逆置为"happy am i"(牛客网)
思路:将字符串全部逆置,再将其中每个单词内部再逆置就可以得到想要的结果i am happy——–&gt;yppah ma i—————-&gt;happy am i 实现代码#include&lt;iostream&gt;using namespace std;#include&lt;string&gt;string my_reverse(string str){ ...原创 2018-05-28 17:59:37 · 1009 阅读 · 0 评论 -
求一个数组中逆序对的个数(牛客网)
实现代码:#include&lt;vector&gt;#include&lt;iostream&gt;using namespace std;int InversePairs(vector&lt;int&gt; data) { if (data.size() &lt;= 1){ return 0; } int count = 0; fo原创 2018-05-28 18:03:04 · 1978 阅读 · 0 评论 -
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数(牛客网))
class Solution {public: bool Find(int target, vector<vector<int> > array) { if(array.size()==0){ return false; } int row=array.size(); int ...原创 2018-05-28 18:07:21 · 494 阅读 · 0 评论 -
字符串空格替换操作(牛客网)
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路一:计算元字符串中空格的个数,再将原来字符串的长度扩充到oldlength+2*spacecount个,然后将字符串从后往前挪,遇到空格就替换 实现代码:class Solution {public: void r...原创 2018-05-24 11:29:46 · 590 阅读 · 0 评论 -
利用两个栈实现一个队列(牛客网)
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型class Solution{public: void push(int node) { stack1.push(node); } int pop() {//这里容易犯错,我们规定Stack2负责出队操作,那么两个栈中总有一个为空一个不为空,所以不要复杂的想...原创 2018-05-29 10:55:27 · 783 阅读 · 0 评论 -
实现一个函数用来匹配'.'和'*'的正则表达式(牛客网)
题目: 更正代码:class Solution {public: bool match(char* str, char* pattern) { if (str == NULL || pattern == NULL) return false; return matchCore(str, pattern); ...原创 2018-05-29 16:49:02 · 1043 阅读 · 0 评论 -
给定一个节点,求他中序遍历顺序下的下一个节点
访问下一个节点有两种情况,有右子树,就往右边遍历,其中假如左子树不为空就一直往左走,否则返回,没有左子树就直接返回。 情况二就是像图中左下角一样的没有右子树或者左右子树都没有就要找对应的没有遍历过得父节点,(if(parent->left==pNode)这说明刚好是符合要求的父节点,否则就要向上沿路找没有遍历过的父节点。/*struct TreeLinkNode { int...原创 2018-08-12 20:21:51 · 740 阅读 · 0 评论