首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

小红书,今年给的太多啦!

今天就来分享一下小红书的几道算法题,有兴趣的同学可以尝试一下自己能做出几题。 题目一:连续子数组最大和 题目描述 小红拿到了一个数组,她希望进行最多一次操作:将一个元素修改为x。...小红想知道,最终的连续子数组最大最大是多少? 输入描述 第一行输入一个正整数t,代表询问次数。 对于每次询问,输入两行: 第一行输入两个整数n和x。代表数组的大小,以及小红可以修改成的元素。...1 ≤ t ≤ 100000 1 ≤ n ≤ 200000 -10^9 ≤ x, a_i ≤ 10^9 每组所有询问的n的和不超过200000。...输出描述 输出t行,每行输出一个整数,代表每次询问能够得到的连续子数组的最大和。...位置进行修改,得到的最大连续子数组和是 dp[i-1][0] + x # i之前的某个位置进行修改,得到的最大连续子数组和是 dp[i-1][1] + nums[i]

26810

Python 自动化指南(繁琐工作自动化)第二版:八、输入验证

当您运行此代码,系统会提示您输入年龄,直到您输入一个有效的年龄。这确保了当执行离开while循环,age变量将包含一个不会在以后使程序崩溃的有效值。...如果你想让一个函数一定次数尝试或一定时间后停止要求用户输入,你可以使用关键字参数limit和timeout。...此外,通过timeout的8和limit的3将确保用户只有 8 秒和 3尝试来提供正确答案: try: # Right answers are handled by allowRegexes...如果用户错误回答超过 3 次,就会引发一个RetryLimitException异常。...、“超出尝试次数!”,或者“正确!”,显示,让我们for循环结束暂停 1 秒钟,让用户有时间阅读。

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Python实战-游戏(猜成语小游戏)

要求:游戏开始,程序会随机选择一个成语,并给出相应的提示。玩家根据提示猜测这个成语是什么,然后输入自己的答案。如果玩家猜对了成语,将获得1分,并可以选择继续下一轮游戏。...如果玩家猜错了,可以继续尝试,但每轮最多有3次猜测机会。游戏结束时会显示当前得分,并询问玩家是否继续游戏。玩家可以选择继续游戏或退出。...编写主游戏循环(play_game),每轮游戏中进行以下操作:随机选择一个成语,并输出相应的提示。提示玩家猜测这个成语是什么。玩家输入猜测的成语。...判断玩家的答案是否正确,如果正确则增加得分,否则给出错误提示。循环直到玩家猜对或达到最大猜测次数每轮游戏结束后,显示当前得分,并询问玩家是否继续游戏。主循环持续进行,直到玩家选择退出游戏。...正确答案是:" + current_idiom) print("当前得分: ", score)# 游戏主循环while True: play_game() continue_game

19921

《蓝桥杯每日一题》bfs·AcWing1562. 微博转发

当用户微博上发布帖子时,他/她的所有关注者都可以查看并转发他/她的帖子,然后这些人的关注者可以对内容再次转发… 现在给定一个社交网络,假设只考虑 L 层关注者,请你计算某些用户的帖子的最大可能转发量。...最后一行首先包含一个整数 K,表示询问次数,然后包含 K 个用户编号,表示询问这些人的帖子的最大可能转发量。 输出格式 按顺序,每行输出一个被询问人的帖子最大可能转发量。...1 4 1 5 2 2 6 输出样例: 4 5 2.题目思路 1号用户关注了2号,就连一条2到1得边,表示2发的微博会被1转发 当询问2号用户微博的转发量...,使用bfs从2号开始一层一层遍历可到达的点,遍历过程中记录层数, 注意层数不能超过题目要求的L 3.Ac代码 import java.util.*; public class Main {...该层的点已被全部删除 此时队列里只有下一层的点了 while循环结束 继续for循环枚举下一层*/ while (size-->0) {

7610

【Python编程导论】第三章- 一些简单的数值程序

我们枚举所有可能性,直至得到正确答案或者尝试完所有值。...注: 1.表达式ans**3的值从0开始,并随着每次循环逐渐变大; 2.当这个值达到或超过abs(x)循环结束; 3.因为abs(x)的值总为正,所以循环结束前进行的迭代次数必然是有限的。...编写循环,应该使用一个合适的递减函数。这个函数具有如下属性: 它可以将一组程序变量映射为一个整数; 进入循环,它的值是非负的; 当它的值≤0循环结束; 每次循环它的值都会减小。...近似解和二分查找 穷举法是一种查找技术,只在被查找集合中包含答案才有效 #使用穷举法求近似平方根 x = 25 epsilon = 0.01 step = epsilon**2 numGuesses...19 # 解法1 进制转换 # 解法2 函数求解 int('10011',base=2) 6.牛顿.拉弗森法的实现中添加一些代码,跟踪求平方根所用的迭代次数

1.1K30

NOIP2019模拟赛(二)03.10

问:最优的方案中,最坏情况下需要询问几次,以及最小的询问期望次数? 注:询问期望次数是所有数需要的询问次数的平均值,最坏情况的询问次数为所有数的询问次数最大值。...样例输入 5 4 8 6 3 5 4 1 5 2 4 1 1 5 1 3 样例输出 2 1 2 样例解释 第一次询问,洪水高度为5 ,露出水面的岩石的编号为{1,2,4}连续的部分为{1,2}和{4}...,答案是2 第二次询问,洪水高度为5,露出水面的岩石的编号为{1,2}连续的部分为{1,2},答案是1 第三次询问,洪水高度为3,露出水面的岩石的编号为{1,2,3,5}连续的部分为{1,2,3}和...{5},答案是2 思路 对于50%的数据 我们可以采用暴力(废话) 所以我们就对于每个查询询问暴力。...而对于每一个询问,只需要输出答案区间内的Ans[Q]即可。对于每一个修改,影响到的只有h[i-1]与h[i+1]所以,再重新分别判断一次即可。 注意:每一次的修改需要先清空上一次对于该点的修改。

35020

红书2023秋招提前批算法真题解析

题目一:连续子数组最大和 题目描述 小红拿到了一个数组,她希望进行最多一次操作:将一个元素修改为x。小红想知道,最终的连续子数组最大最大是多少? 输入描述 第一行输入一个正整数t,代表询问次数。...1 ≤ t ≤ 100000 1 ≤ n ≤ 200000 -10^9 ≤ x, a_i ≤ 10^9 每组所有询问的n的和不超过200000。...输出描述 输出t行,每行输出一个整数,代表每次询问能够得到的连续子数组的最大和。...示例 输入 3 5 10 5 -1 -5 -3 2 2 -3 -5 -2 6 10 4 -2 -11 -1 4 -1 输出 15 -2 15 说明 第一组询问,修改第二个数。...位置进行修改,得到的最大连续子数组和是 dp[i-1][0] + x # i之前的某个位置进行修改,得到的最大连续子数组和是 dp[i-1][1] + nums[i]

21320

LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题

) 问题存在单调性: 当操作次数 k 可以满足,操作次数 k - 1 一定能满足; 当操作次数 k 不可满足,操作次数 k + 1 一定不能满足。...一些错误的思路: 尝试 1 - 贪心双指针: nums[i] 优先使用最小值, nums[j] 优先使用最大值,错误用例: [1 2 3 6] ; 尝试 2 - 贪心: nums[i] 优先使用最小值...right = k - 1 } } return n - 2 * left } } 复杂度分析: 时间复杂度: O(nlgn) 二分答案次数最大为...由此,我们甚至不需要线性扫描都能计算出众数以及众数的出现次数,Nice! 当然,最后计算出来的出现次数有可能没有超过数组长度的一半。.../ 问题分析 初步分析: 问题目标: 求出以每个节点为根节点,从根节点到其他节点的反转操作次数,此题属于换根 DP 问题 思考实现: 暴力: 以节点 i 为根节点走一次 BFS/DFS,就可以

32430

经典动态规划:高楼扔鸡蛋(进阶篇)

首先简述一下原始动态规划的思路: 1、暴力穷举尝试在所有楼层1 <= i <= N扔鸡蛋,每次选择尝试次数最少的那一层; 2、每次扔鸡蛋有两种可能,要么碎,要么没碎; 3、如果鸡蛋碎了,F应该在第i层下面...,否则,F应该在第i层上面; 4、鸡蛋是碎了还是没碎,取决于哪种情况下尝试次数更多,因为我们想求的是最坏情况下的结果。...我们最终要求的其实是扔鸡蛋次数m,但是这时候m状态之中而不是dp数组的结果,可以这样处理: int superEggDrop(int K, int N) { int m = 0; while...while循环结束的条件是dp[K][m] == N,也就是给你K个鸡蛋,允许测试m次,最坏情况下最多能测试N层楼。 注意看这两段描述,是完全一样的!...刚才的思路之上,注意函数dp(m, k)是随着m单增的,因为鸡蛋个数k不变,允许的测试次数越多,可测试的楼层就越高。

34240

经典动态规划:高楼扔鸡蛋(进阶篇)

首先简述一下原始动态规划的思路: 1、暴力穷举尝试在所有楼层1 <= i <= N扔鸡蛋,每次选择尝试次数最少的那一层; 2、每次扔鸡蛋有两种可能,要么碎,要么没碎; 3、如果鸡蛋碎了,F应该在第i层下面...,否则,F应该在第i层上面; 4、鸡蛋是碎了还是没碎,取决于哪种情况下尝试次数更多,因为我们想求的是最坏情况下的结果。...我们最终要求的其实是扔鸡蛋次数m,但是这时候m状态之中而不是dp数组的结果,可以这样处理: int superEggDrop(int K, int N) { int m = 0; while...while循环结束的条件是dp[K][m] == N,也就是给你K个鸡蛋,允许测试m次,最坏情况下最多能测试N层楼。 注意看这两段描述,是完全一样的!...刚才的思路之上,注意函数dp(m, k)是随着m单增的,因为鸡蛋个数k不变,允许的测试次数越多,可测试的楼层就越高。

1.2K40

树状数组初探

可能这样说还是有点抽象,我们举个例子:当 x 为 8 ,其对应的二进制数为 1000,那么最右边的 0 的个数为 3 ,即 k = 2^3 = 8。...一共执行了 3循环。而 7 对应的二进制为 111 。...即当 x 为奇数的时候,循环执行次数不会超过 x 对应二进制数字的位数 当 x 为偶数的时候,循环执行次数同样不会超过 x 对应二进制数字的位数 当 x 为 2 的正整数次幂的时候,循环只会执行...因此,对于任意大于 0 的 x,求出区间 [1, x] 的元素和的循环执行次数不会超过 log(x) + 1 即用树状数组求区间的和的时间复杂度不会超过 log(x) 的整数值部分 + 1。...关于树状数组的下标 最后,上文还留下了一个问题:我们设置树状数组元素下标范围设置的是 1~n,而并不是 0~n-1。

89120

经典动态规划:高楼扔鸡蛋(进阶篇)

首先简述一下原始动态规划的思路: 1、暴力穷举尝试在所有楼层1 <= i <= N扔鸡蛋,每次选择尝试次数最少的那一层; 2、每次扔鸡蛋有两种可能,要么碎,要么没碎; 3、如果鸡蛋碎了,F应该在第i层下面...,否则,F应该在第i层上面; 4、鸡蛋是碎了还是没碎,取决于哪种情况下尝试次数更多,因为我们想求的是最坏情况下的结果。...我们最终要求的其实是扔鸡蛋次数m,但是这时候m状态之中而不是dp数组的结果,可以这样处理: int superEggDrop(int K, int N) { int m = 0; while...while循环结束的条件是dp[K][m] == N,也就是给你K个鸡蛋,允许测试m次,最坏情况下最多能测试N层楼。 注意看这两段描述,是完全一样的!...刚才的思路之上,注意函数dp(m, k)是随着m单增的,因为鸡蛋个数k不变,允许的测试次数越多,可测试的楼层就越高。

68620

P3613 【深基15.例2】寄包柜

现在有 q(1 \le q\le10^5)q(1≤q≤105) 次操作: 1 i j k:第 ii 个柜子的第 jj 个格子存入物品 k(0\le k\le 10^9)k(0≤k≤109)。...已知超市里共计不会超过 10^7107 个寄包格子,a_iai​ 是确定然而未知的,但是保证一定不小于该柜子存物品请求的格子编号的最大值。当然也有可能某些寄包柜中一个格子都没有。...输入格式 第一行 2 个整数 nn 和 qq,寄包柜个数和询问次数。 接下来 qq 个整数,表示一次操作。 输出格式 对于查询操作,输出答案,以换行隔开。...输入输出样例 输入: 5 4 1 3 10000 118014 1 1 1 1 2 3 10000 2 1 1 输出: 118014 1  #include ...using namespace std; int main() { map > a; int n,q; int i,j,k,t; cin>>n>>q; while

20820

用python实现猜数字游戏

解决:定义一个最大常量和最小常量,超出最大常量或者最小常量则会提醒玩家输入内容的范围。 2 方法 首先导入random随机模块 ,然后定义随机数的范围,然后定义次数。...使用while循环来判断是否符合随机数和输入数值的比较,并且设置次数递减 使用 isdigit 函数来完成判断玩家数据类型,避免报错。...代码清单 1 import random # 导入随机模块times = 6 # 定义尝试次数game = random.randint(0, 20) # 定义随机数范围max = 20 # 定义最大常量...还有%d次机会' % times) if times > 0: #还有次数 print('尝试一次吧') else:...3 结语 就此问题,首先导入模块,再利用while,if循环实现多次猜谜,通过实验,证明该方法是有效的。但此方法或许并不是最优解答,与此代码中也有许多可改进之处,后续会在此基础上再优化。

20520

优雅的暴力——莫队算法

其中 c_i表示数字 i [l,r] 中的出现次数。 小B请你帮助他回答询问。 输入格式 第一行三个整数 n,m,k。 第二行 n 个整数,表示 小B 的序列。...就是 18-7=11 于是, [3, 6]的答案就是[2,5]的答案减去a[2]加上a[6], 所以[3, 6]的答案是 18-8+4=14 其他区间以此类推 下面把上面的举例抽象化一下 ?...(1), 最多不能超过O(log n), 不然莫队复杂度会原地爆炸....而且注意尽量将add、sub的复杂度控制O(1)内. 显然,对于本题,需要开一个cnt数组维护各个数字出现的次数. 那么add、sub就很好写了....所以我们需要预先处理好**某些均匀分布序列中的区间(称之为特征区间)**的答案,让这些特征区间成为莫队中的"上一个区间”, 然后在线回答询问的时候,让询问区间的答案从这些特征区间的答案转移过来而不是从上一个询问区间的答案转移过来

77410

UOJ#206. 【APIO2016】Gap(交互,乱搞)

查询需要满足 s≤ts≤t,否则程序将会终止,该测试点计为 00 分。 Pascal 你需要使用单元 graderhelperlib。...查询需要满足 s≤ts≤t,否则程序将会终止,该测试点计为 00 分。 样例一 C/C++ 考虑 N=4,a1=2,a2=3,a3=6,a4=8N=4,a1=2,a2=3,a3=6,a4=8。...则答案应该是 33,可以通过下面的几组对 MinMax 的询问获得: 调用 MinMax(1, 2, mn, mx),则 mn 和 mx 皆返回 22。...每次询问两端的最大值,然后不断往中间缩,这样就能把原序列恢复出来 100分做法: 首先这一部分对询问次数没有限制,这样我们考虑从最小的点开始,慢慢询问 这里用到一个非常神奇的性质 对于最大值为$r$,最小值为...$l$的区间,答案的最小值为$\frac{r-l}{N-1}$ 考场上想不出来,不过看到之后觉得还是挺显然的 这样我们只需要关注长度大于它的区间就可以了,直接for循环往后推 #include "gap.h

36800

『ACM-算法-二分法』信息竞赛进阶指南--二分法

不难看出,朴素的枚举验证时间复杂度是O(n)的,而二分可以做到O(logn) 特征: 1.答案具有单调性 2.二分答案的问题往往有固定的问法,比如:令最大值最小(最小值最大),求满足条件的最大(小...// 单调递增序列a中查找>=x的数中最小的一个(即x或x的后继) while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) r = mid;...else l = mid + 1; } // 单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱) while (l < r) { int mid = (l + r + 1) / 2;...l + r) / 2; if (calc(mid)) r = mid; else l = mid; } // 实数域二分,规定循环次数法 for (int i = 0; i < 100; i++)...,判定“每组厚度之和不超过二分的值”能否m组内把书分完 int l = 0, r = sum_of_Ai; while (l < r) { int mid = (l + r) / 2; if (

50020

c语言每日一练(3)

(n-1)(n+2) 解析:先看代码构成,两个循环嵌套在了一起,每一次循环都会执行一次语句3,那么我们的目标就是计算出总循环次数。...接下来看第二层循环,第二层循环的j被初始化为了n,循环继续条件为j>i,且每次循环j减1。第二层循环受到i的值的影响,我们在做这种题可以先代几个值进去尝试。...总共的循环次数是n+n-1+n-2+.....+1最后的结果为(1+n)*n/2,所以答案是C 2、对于代码段,下面描述正确的是( ) t=0; while(printf("*")) { t++...所以最后答案为B 3、如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】( ) int gcd(char x,char y) { int min = x < y ?...综上所述,答案为ABCD 编程题1: 数字升序数组中出现的次数_牛客题霸_牛客网 int GetNumberOfK(int* nums, int numsLen, int k) { int

10810
领券