
Daily practice
Practice makes perfect
canvass
Practice makes perfect
展开
-
翻转单词顺序列
OJ链接:翻转单词顺序列题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题思路是一个字符串逆置的问题,我们这里要考虑自己划分子串的问题。 例如:“student. a a原创 2020-07-29 23:15:01 · 141 阅读 · 0 评论 -
左旋转字符串
OJ链接:左旋转字符串题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路方法一:保存第一个,剩下的整体前移一个,第一个放在后,完成一次移动,一次能移动,多次也可以。 方法二:局部逆置,在整体逆置。例,“abcXYZdef” ->左移3原创 2020-07-29 22:49:32 · 130 阅读 · 0 评论 -
二叉树层序遍历
OJ链接:二叉树层序遍历题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路借助queue完成。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<int原创 2020-07-28 16:09:21 · 125 阅读 · 0 评论 -
链表中倒数第k个结点
OJ链接:链表中倒数第k个结点题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路题目中的链表是单链表,不能从后往前进行。 可以定义两个指针,一个指针先走k步,再让另一个指针跟在后面,使用“前后指针”的方式,当前面的指针到达结尾,后面的指针,也就是倒数第k个节点。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/c原创 2020-07-23 09:49:22 · 118 阅读 · 0 评论 -
二进制中1的个数
OJ链接:二进制中1的个数题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。解题思路用最优的方案代码class Solution {public: int NumberOf1(int n) { int count =0; while(n) { n&=(n-1);//可以避免无效检测 count++; }原创 2020-07-23 09:39:17 · 102 阅读 · 0 评论 -
重建二叉树
OJ链接:重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路根据root节点,将中序vector划分成vin_left,vin_right两部分中序子序列。 根据中序子序列长度,将前序vector划分成pre_left, pre_right对应的前序子序列。 root->le原创 2020-07-21 17:22:06 · 131 阅读 · 0 评论 -
从尾到头打印链表
OJ链接:从尾到头打印链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路方法一,stack方式,这种方式会有内存占用过多的问题。 方法二,逆置数组。 方法三,递归方式。代码方法一/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL)原创 2020-07-21 16:33:59 · 136 阅读 · 0 评论 -
替换空格
OJ链接:替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题,移动方向一定是向后移动,所以现在的问题是移动多少的问题。 因为是 ' ' -> "%20",是1换3,所以可以先统计原字符串中空格的个数(设为n),然后可以计算出新字符串的长度 new_length = old_length + 2原创 2020-07-21 16:15:09 · 165 阅读 · 0 评论 -
数组中出现次数超过一半的数字
OJ链接:数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路思路一:定义map,使用<数字,次数>的映射关系,最后统计每个字符出现的次数。 思路二:排序,出现次数最多的数字,一定在中间位置。然后检测中间出现的数字出现的次数是否符合要求。 思路三:同时去掉两个不同的数字,到最后剩原创 2020-07-21 15:47:40 · 134 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
OJ链接:调整数组使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路借鉴一下插入排序的思想,从前往后,把偶数往后移动,腾出位置放入奇数。代码class Solution {public: void reOrderArray(vector<int> &array) { int原创 2020-07-20 16:59:23 · 105 阅读 · 0 评论 -
旋转数组的最小数字
OJ链接:旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目解析数组问题,本质其实是一个求小值问题。方法一:理论上,遍历一次即可,但是我们可以根据题面使用稍微高效且更简单一点的做法。按照要求,要么是一个非递减排序的数组(小值在开始).原创 2020-07-20 16:50:20 · 83 阅读 · 0 评论 -
二维数组中的查找
OJ链接:二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路数组样式如下: 1 2 3 4 2 3 4 5 3 4 5 6正常查找的过程,本质就是排除的过程,如果双循环查找,本质是一次排除一个,效率过低。根据题面要求,我们可以采取从右上角(或左下角)进行比较,这样可以做到一次排除一 行或者一列。代码...原创 2020-07-20 16:38:28 · 117 阅读 · 0 评论 -
最短路径走出迷宫
题目描述NowCoder最喜欢游乐场的迷宫游戏,他和小伙伴们比赛谁先走出迷宫。现在把迷宫的地图给你,你能帮他算出最快走出迷宫需要多少步吗? 题目链接:走迷宫解题思路1. 采用一个二维数组,不断的接受迷宫地图(因为有多个地图),获取到迷宫地图后,采用广度 优先方式走迷宫,找到的第一条路径一定是最短的路径,但是深度优先则不一定。2. 结构设定:pos:x,y表示当前所在位置,level所经过步数 dir: 表示当前位置的上、下、左、右四个方向 queue: 广度优先遍历,需要用到队列,保.原创 2020-07-18 10:51:54 · 545 阅读 · 0 评论 -
实现后缀表达式的计算器
解题思路循环输入,获取逆波兰表达式(后缀表达式),然后进行以下步骤,直到测试完所有的测试用例:遇到数字字符串,将该数字字符串转化为数字然后入栈。利用int atio(const char ptr)将数字类型的字符串转换成整形数据;它包含在stdlib.h头文件中; 这里的参数类型是char所以这里要将string转化为c类型的string,在进行转化。 遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算,完成好将结果入栈。NOTE:根据逆波兰表达式定义:先取到的数字为运算符的右操...原创 2020-07-17 10:52:00 · 303 阅读 · 0 评论 -
最长上升子序列
题目链接:最长上升子序列解题思路动态规划的难点在于定义数组和创建“状态转移方程”。1. 定义height来存储数据,f[i]为以height[i]结尾的元素的最长上升子序列元素个数,初始时 将f所有内容全部初始化成1,因为子序列中至少包含一个元素。 2. 定义"状态转移方程" 一开始先将f中的数据全部置为1,因为最小的子序列长度为1 然后对于每个height[i],通过遍历height[0]~~height[i-1]之间的数据,如果在该区间中找 到一个height[j]比height[原创 2020-07-16 10:14:36 · 182 阅读 · 0 评论 -
奇数位上都是奇数或者偶数位上都是偶数
给定一个长度不小于2的数组arr。 写一个函数调整arr,使arr中要么所有的偶数位上都是偶数,要么所有的奇数位上都是奇数上。 要求:如果数组长度为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1),下标0,2,4,6...算作偶数位,下标1,3,5,7...算作奇数位,例如[1,2,3,4]调整为[2,1,4,3]即可。思路:在偶数位上寻找非偶数,在奇数位上寻找非奇数,两个数字进行位...原创 2019-12-09 23:21:43 · 293 阅读 · 1 评论 -
Daily question 1
1.分析下述程序执行的结果:#include<iostream>using namespace std;class cla{ static int n; public: cla() { n++; } ~ cla() { n--; } static int get_n() { return n; }};int cla::n=0;...原创 2019-11-19 16:50:11 · 694 阅读 · 0 评论