
牛客竞赛
牛客竞赛题集
DeepGoAI
欢迎学习交流!
展开
-
两个链表相交的一系列问题
思路:1.首先要实现对单链表是否有环的判断,以及取得第一个入环节点。步骤为,设定一个块指针,每次走两步,设定一个慢指针,每次走一步。如果无环,则快指针能够很块遍历完链表,直接退出返回NULL如果有环,则他们会在某个时刻相遇,此时让快指针指向头指针,并且,快指针和慢指针每次只走一步。最后相遇的位置即为第一个入环节点。2.其次是判断,两个链表是否相交,分以下几种情况:1...原创 2020-04-17 21:11:50 · 326 阅读 · 0 评论 -
计算满足最大值减最小值小于某个数的子数组个数
计算满足最大值减最小值小于某个数的子数组个数分析:先验知识:一个数组中,如果满足max(arr[i..j])-min(arr[i..j]),则内部的所有子数组都满足 (仔细思考一下)一个数组中,如果不满足max(arr[i..j])-min(arr[i..j]),则内部的所有子数组都不满足用双指针的方式,i和j都从左往右移动,但是i不能超过j当i和j范围内都满足条件...原创 2020-04-14 22:27:49 · 463 阅读 · 0 评论 -
给定整形矩阵map,计算最大矩形区域为1的数量
给定整形矩阵map,计算最大矩形区域为1的数量如题:思路:此处需要用到单调栈1.首先对每一行进行遍历,并构造以当前行作为底部,的一个直方图。举个例子,假设数据如下:3 4 1 0 1 1 1 0 1 0 1 1 1 1 那么先遍历第一行,得到的直方图就是 1 0 1 1,...原创 2020-04-13 22:20:17 · 512 阅读 · 2 评论 -
将数组进行划分,并求两个数组最大值之间的差值
将数组进行划分,并求两个数组最大值之间的差值思路:因为要将数组进行划分为两个,并计算两个数组之间最大值的差值。很容易想到用预处理数组,分别计算从左到右所记录的当前最大值和从右到左所记录的当前最大值然后再进行遍历,计算两者差值的最大值代码:#include<iostream>#include<cstdio>#include<cst...原创 2020-04-10 22:23:56 · 1085 阅读 · 0 评论 -
两个不相交的数组最大和
题目如题下分析:要从数组中找出两个不相交的子数组,并计算两者的最大和。可以看出,本质上这两个子数组是不相交的,所以各占数组的一半。可以设定两个预处理数组:1.首先从右往左扫,当指针走到第i个位置,计算当前N-1,到i 中,所遇到的最大累加和,并记录下来,对每个位置i都进行如此计算,通过这样,就可以知道每个位置在从右往左扫的时候所遇到的最大累加和。2.接着从左往右扫,同样以上...原创 2020-04-10 21:56:03 · 1027 阅读 · 0 评论 -
计算水的容积
思路:对每一个格子,都计算其对应能容纳的水,即单独考察每一个位置,实际上能容纳多少的水。比方说上面的例子,我们看 第2个位置,对应的高度为1,要计算这个位置实际上能容纳的水,只需要计算这个位置的左边部分的最高点,和右边部分的最高点,就能轻松计算出这个位置实际能容纳的水量了。 就是 3-1 = 2。那么,对于每个位置,如何计算其左边部分最大值和右边部分最大值呢?很简单,就是从左往...原创 2020-04-05 22:08:16 · 846 阅读 · 0 评论 -
计算一个矩阵中,累加和最大的子矩阵的累加和
如题:思路:如果采用暴力的方法,那么复杂度为O(n^4)如果矩阵为一个(1*M)大小的话,那么就是求数组的最大累加和。https://blog.youkuaiyun.com/Willen_/article/details/104601391其次,我们思考一个矩阵为(2*M)大小的情况,做法就是先求第一行的所有子矩阵的最大累加和(就是数组的最大累加和)然后再求第一行到第二行的所有...原创 2020-04-04 22:46:46 · 483 阅读 · 0 评论 -
2017牛课堂第三季第三课第一题-并查集用于二叉数最近公共节点查询
2017牛课堂第三季第三课第一题-并查集用于二叉数最近公共节点查询思路:首先,直接二叉树遍历,是肯定做不到的利用并查集,维护当前查询的根节点,能顾保证实现。具体的,首先设定好节点并查集,即在初始阶段,father[i]都指向自己。其次,在对query 进行处理,要求每一个节点的查询,都产生对应的相关序列。例如有(1,2)(1,3) 两个查询对,那么query[1...原创 2020-03-08 22:04:31 · 236 阅读 · 0 评论 -
保卫方案,单调栈
保卫方案战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都位于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况。 一旦发生外地入侵事件,山顶上的岗哨将点燃烽烟,若两个岗哨所在的山峰之间没有更高的山峰遮挡且两者之间有相连通路,则岗哨可以观察到另一个山峰上的烽烟是否点燃。由于小...原创 2020-03-02 22:58:44 · 308 阅读 · 0 评论 -
数组小和
题目思路数组小和,以及其他相关两数对之间关系的题目,都可以通过这种思考方式进行思考。通过改写归并排序进行计算,每次对排序的同时计算小和,因为每次计算子排序的时候,都能够进行计算一次小和,当要将两个排好序的两个子序列进行合并时, 当左边的当前值比右边的当前值要小,说明,这个值比右边的所有 值都要小,所有就产生了arr[i]*(r2-l2+1)个小和,通过这种进行计算,...原创 2020-03-01 21:43:52 · 238 阅读 · 0 评论 -
只用递归函数实现栈的逆序
只用递归函数实现栈的逆序一个栈一次压入 1,2,3,4,5, 那么从栈顶到栈底分别为5.4.3.2.1为了让占栈中逆序,但是只能用递归函数实现,不能用其他数据结构。思路,用两个递归函数实现第一个递归函数实现提取出栈底元素第二个递归函数实现递归得从栈中拿出栈底元素,再push回去代码#include<iostream>#include<cstdl...原创 2020-03-01 20:17:15 · 389 阅读 · 0 评论 -
给定一个数组,值可以为正、负和0,请返回累加和小于等于k的最长子数组长度。
给定一个数组,值可以为正、负和0,请返回累加和小于等于k的最长子数组长度。思路申请两个辅助数组,分别为 min_v[N] 和 map_idx[N]min_v[i] 用于记录从i开始,往右累加的最小和map_idx[i]由于记录,得到最小和的右边界的下标min_v[i]的记录规则就是,从优往左进行遍历,如果累加和一直<0 那么就一直累加下去,这个条件下,map_idx[i]...原创 2020-02-29 21:08:57 · 432 阅读 · 0 评论 -
求定值k的最长子数组长度
给定一个数组,值可以为正、负和0,请返回累加和为给定值k的最长子数组长度。思路1.逐个元素求取累加和 ,当保存最累加和最先出现的情况。2.设K 为定值,当当前的累加和 减去K 时, 有存在对应的累加和,则中间的距离就为长度,进行保存,直到所有序列遍历完毕。代码如下,#include<iostream>#include<cstdlib>#includ...原创 2020-02-27 22:58:27 · 523 阅读 · 0 评论 -
A和B取数,动态规划
有一排正数,玩家A和玩家B都可以看到。每位玩家在拿走数字的时候,都只能从最左和最右的数中选择一个。玩家A先拿,玩家B再拿,两人交替拿走所有的数字,两人都力争自己拿到的数的总和比对方多。请返回最后获胜者的分数。例如:5,2,3,4玩家A先拿,当前他只能拿走5或者4。如果玩家A拿走5,那么剩下2,3,4。轮到玩家B,此时玩家B可以选择2或4中的一个,…如果玩家A拿...原创 2020-02-26 22:57:03 · 726 阅读 · 0 评论 -
J Free
J Free链接:https://ac.nowcoder.com/acm/contest/884/JProblemYour are given an undirect connected graph.Every edge has a cost to pass.You should choose a path from S to T and you need to pay for all...转载 2019-07-31 23:08:37 · 1380 阅读 · 0 评论 -
LRU management
链接:https://ac.nowcoder.com/acm/contest/883/J来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld输出描述:For each case, print the result of each operation in ...原创 2019-07-30 21:35:30 · 296 阅读 · 0 评论