
NowCoder
文章平均质量分 71
小胡同的诗
千里之行,始于足下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
牛客网 旋转矩阵(模拟)
AC代码如下:#include<bits/stdc++.h>using namespace std;int main(){ int n,m,t,cnt,len,i,j; char image[100][100],str[10000]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); g...原创 2018-03-24 17:56:51 · 305 阅读 · 0 评论 -
利用栈的结构O(1)动态查询当前最小值(双栈)
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:利用两个栈来进行操作,一个存正常的栈数据,另一个辅助栈存放当前最小值。入栈时:如果当前没有最小值或者加入的数字小于等于当前的最小值则更新辅助栈,即push新数据,否则不操作,这里注意定义为小于等于就加入,而不是小于,因为比如出现两个相等最小,靠后那个数字被pop掉了此时最小还...原创 2019-07-20 07:36:39 · 399 阅读 · 1 评论 -
有序矩阵查询某值是否在阵中(搜索)
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:由于是有序的,我们找个起点开始搜索,注意这个起点一定要能确定一个方向是递减一个是递增的,不然两个决策一样地话就不能搜索了,于是找了右上角作为起点dfs,复杂度O(max(row,col))O...原创 2019-07-17 14:20:09 · 440 阅读 · 0 评论 -
矩形覆盖(动态规划)
链接:矩形覆盖题目详情:我们可以用2∗12*12∗1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2∗12*12∗1的小矩形无重叠地覆盖一个2∗n2*n2∗n的大矩形,总共有多少种方法?分析:看这样一个图,假如第列的那排用竖的填充,标为1,那么显然剩下的n-1列的排列方案数量就是它这样排的方案数;如果第n列第一行用横的填充,那么下一行和前一列这四块格子中明显都要标记为0,于是这...原创 2019-07-30 00:03:52 · 1034 阅读 · 0 评论 -
统计一个数字中二进制位1的个数
题目详情:给一个二进制数,其中负数用补码表示,问其中二进制‘1’的个数。思路1:在计算机中,其实为了运算的方便,负数都是用二进制的补码表示,也就是说,我们对其进行位运算其内部加法器的实现都是先转化成补码(详见组成原理)。对于这题有以下几个思路:按位统计,也就是每次从二进制最右边通过与1来查看该二进制位是否为1,然后通过循环判断。但注意这个方法对于负数要做特判,否则会陷入死循环!根据补码的特...原创 2019-07-18 07:38:06 · 288 阅读 · 0 评论 -
和为S的连续序列(双指针、滑动窗口)
链接:和为S的连续序列题目详情:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!分析:很容易...原创 2019-08-02 16:31:18 · 160 阅读 · 2 评论 -
线性复杂度查找链表的公共节点
题目详情:输入两个链表,找出它们的第一个公共结点。思路:1,由于从公共节点开始之后都是公共节点,也就是说不管两个链的长度是否一样,反过来的公共长度一定一样,于是用两个栈来从后往前匹配,找到最后一个公共节点即为原链的第一个公共节点。2,和思路一很类似,先让两个开始匹配的指针水平线相同,也就是长的那个要走到与短的那个链有相同长度的位置,之后就从前往后匹配。之所以这样子做是因为:假设k为公共长度...原创 2019-07-25 15:33:50 · 139 阅读 · 0 评论 -
镜像反转二叉树
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思...原创 2019-07-25 16:01:58 · 213 阅读 · 0 评论 -
线性时间找链表倒数第k个节点
题目描述09年统考的源题,虽然都能得到**O(n)**的复杂度,不过满分做法是双指针,也就是指针扫一遍,其余做法均10分。输入一个链表,输出该链表中倒数第k个结点。思路:比较直观的想法是辅助空间或者是借助栈、递归等方式实现,不过正解还是双指针,发现408很喜欢靠双指针的思想,用来优化线性复杂度。做法如下:指针1顺序扫到正数第k个节点,从这时候开始指针2跟着指针1往后扫,当指针1到达尾部时,...原创 2019-07-26 15:47:15 · 182 阅读 · 0 评论 -
滑动窗口问题(单调队列)
链接:滑动窗口题目详情:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[...原创 2019-08-01 11:04:03 · 508 阅读 · 0 评论 -
数组中只出现一次的数字(异或)
链接:数组中只出现一次的数字题目详情:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析:X对应1的位两个数一定相反,于是找一个1的数将该异或值拆为两组:0、1,显然该位对应为1的异或到一块一定是其中一个出现1次的数,因为如果出现两次,那么两个会同时异或到一块,相当于0,这样做是根据异或具有的交换律和结合律得到的。这道题是数组中只出...原创 2019-07-28 10:32:29 · 266 阅读 · 2 评论 -
台阶问题(动态规划)
链接:变态跳台阶题目详情:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:状态:dp[n]:表示n级台阶跳法转移方程:dp[n] = dp[n-1]+dp[n-2]+…+dp[1]+1这里有两种推法:1,由于dp[n-1]=dp[n-2]+…+dp[1]+1所以dp[n] = dp[n-1] + dp[n-1...原创 2019-07-29 14:52:27 · 756 阅读 · 0 评论 -
给定二叉树的含中序的任意两个遍历序列还原二叉树
思路:该二叉树能够还原的充分条件是这两个序列必含有一个中序遍历序列。因为通过中序遍历序列以及之外的任意一个序列能够退出左右子树的规模,然后递归地构建父亲节点。Code:/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *rig...原创 2019-07-12 09:31:09 · 430 阅读 · 0 评论 -
蓝桥训练赛 (14点--18点 19点--21点20)
今天打得两场场线上赛了,由于部分题目之前看过,所以写的稍微好点,不过这没什么得意的,毕竟比赛就没这种原题了。这场从19点打到21点20左右,思路还是不怎么明确!特别是那题进制题,明明可以直接处理完再对数组处理,却想复杂了。幸亏最后回头是岸了。AC1:标题:九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当...原创 2018-03-25 22:20:11 · 230 阅读 · 0 评论 -
牛课网2018-4-21“牛客小白月赛2” A-数字方阵(搜索)
题目大意:给你一个n*n的方阵,填入1~n^2数字,使得方阵每个行的和,列的和,主对角线的和,副对角线的和均不相等,输出其中一种填法。解题思路:目前只想到爆搜,TLE了。待补代码如下:#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include...原创 2018-04-22 01:06:34 · 375 阅读 · 2 评论 -
牛客网2018-4-21“牛客小白月赛2” B-小马过河(数学题)
解题思路:假设垂足为(x,y),然后通过斜率公式:1.线上两点的斜率等于其中一点和垂足的斜率k,2.线外一点和垂足的斜率等于-1/k。联立二元一次方程可以解出(x,y);斜率k不存在和斜率k为0可以来个特判。AC代码如下:#include<stdio.h>#include<string.h>#include<algorithm>#include<io...原创 2018-04-21 22:56:20 · 930 阅读 · 0 评论 -
牛客网练习赛--填数字(贪心)
题目大意: 给你一个N(资本),以及下标1~9分别对应的费用,让你用这些资本选取的数字(下标 )组成一个数字,这个数字尽量大.解题思路: 刚开始想到贪心,因为整个串的长度一定为N/min,然后替换其中的数字,因为这资本N不一定用得完。写了个爆搜+剪枝,T了。后又想到这是类似于背包类型的问题,完全背包?时间到了还是没过,后来看了别人的代码。恍然大悟…还是菜QAQ报告 每次输出的时候最坏的情况...原创 2018-06-15 23:25:21 · 248 阅读 · 0 评论 -
2018计祘之道 初赛 第一场 (A)
题目大意: 给你n辆车的重量,并且给你降低某一辆车1KG所需的金额S,以及你的所有钱P。注意,车的最小重量只能为1,并且重量都是整数。问:最大限度地使用这些钱将所有车的重量尽量减小,问结果这些车中重量最大为多少?解题思路: 题目的大致意思可以理解为:将所有车的重量之间的差值尽量缩小,求其中max。可以贪心地处理。这里由于数据都在20000以内,可以利用桶排序,重复元素的处理也会比较方便。A...原创 2018-06-09 21:36:57 · 244 阅读 · 0 评论 -
Rabbit的工作(1)(预处理+DP)
题目链接: Rabbit的工作(1)题目大意: 给两个数n,m以及长度为n的01字符串,m表示起初拥有的体力,问用手里的体力值最多能得到多少1(工作的天数),每连续工作i天当天选择工作的消耗体力为i。n∈[1,400]解题思路: 决策问题,每一天的决策会影响到该条分支之后的决策。考虑用搜索+剪枝,超时,不过能过90数据。发现有些状态重复搜索了,考虑用数组记录状态,不过按思路设置的数组有4004...原创 2019-01-06 16:34:40 · 294 阅读 · 2 评论 -
NowCoder逆序数(离散化+树状数组)
题目链接:逆序数解题思路:逆序数模板题,将数值离散化后把求值的逆序数转化成求其rank的逆序数。利用树状数组提升标记数组的效率。注意i - get_sum(rnk[i])表示在长度为i,或者说第i个数,之前排名比他大数量。AC代码:#include <cstdio>#include <cstring>#include <cstdlib>#incl...原创 2019-02-15 17:05:41 · 177 阅读 · 0 评论 -
牛客练习赛41
题目链接:牛客练习赛41官方题解:题解A题解题思路:考虑m,n相等或者m为1时一定能完全成功翻转,其他情况例如m=n-1或m=n-2均无法成功,交了一发,1A。AC代码:#include <bits/stdc++.h>using namespace std;int main() { int T,n,m; cin >> T; whi...原创 2019-03-01 23:33:41 · 245 阅读 · 0 评论 -
折纸问题(中序遍历二叉树)
题目链接:折纸问题来源:牛客网请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up"....原创 2019-03-02 15:06:17 · 307 阅读 · 0 评论 -
查询区间中出现次数超过长度的一半的数字
思路:思路有很多,大致有这几种:强行在线统计每个数字的出现次数,由于不知道数字的规模,用键值树(hash_map、Tree_map)记录次数,复杂度O(nlogn)O(nlogn)O(nlogn);利用排序的,如果某个数超过数组长度的一半那么它必然在中间位置mid出现,于是排序完我们可以扫一遍统计该数字的出现次数,复杂度O(nlogn)O(nlogn)O(nlogn);类似于在线找区间最大...原创 2019-07-09 22:23:28 · 569 阅读 · 1 评论 -
二叉搜索树后序遍历序列合法性判断
链接:二叉搜索树后序遍历序列合法性判断题目详情:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析:分治,根据value(left)<value(root)<value(right)value(left) < value(root) < ...原创 2019-07-28 18:05:09 · 431 阅读 · 0 评论