我正在尝试从HackerRank上的Quora完成编程挑战:https://www.hackerrank.com/contests/quora-haqathon/challenges/upvotes
我设计了一个适用于某些测试用例的解决方案,但是,对于许多我使用的算法都不正确。
我不是寻求解决方案,而是简单地要求解释如何创建子序列,然后我自己实现解决方案。
例如,输入:
6 6
5 5 4 1 8 7
正确的输出是-5,但我没有看到-5是答案。子序列将是[5 5 4 1 8 7],我不能在我的生活中找到一种方法来获得-5作为输出。
问题陈述
在Quora,我们有汇总图表来跟踪我们每天获得的赞成票数量。
当我们查看某些大小的窗口的模式时,我们考虑了尽可能有效地跟踪非减少和不增加子范围等趋势的方法。
针对此问题,您将获得N天的upvote计数数据和固定的窗口大小K.对于K天的每个窗口,从左到右,查找窗口内非减少子范围的数量减去数量窗口内不增加的子范围。
天数窗口被定义为连续的天数范围。因此,确实存在需要计算该度量的N-K + 1个窗口。非递减子范围被定义为索引[a,b],
a<b
的连续范围,其中每个元素至少与前一个元素一样大。类似地定义了非增加子范围,除了每个元素至少与下一个元素一样大。窗口内的这些相应子范围最多为K(K-1)/ 2,因此度量以[-K(K-1)/ 2,K(K-1)/ 2]为界。约束
1≤N≤100,000天 1≤K≤N天
输入格式
第1行:两个整数,N和K
第2行:upvote计数的N个正整数,每个整数小于或等于10 ^ 9输出格式
第1行..:N-K + 1个整数,每个窗口的一个整数在每行上得到结果
示例输入
5 3
1 2 3 1 1
示例输出
3
0
-2
解释
对于[1,2,3]的第一个窗口,有3个非递减子范围,0个不递增,所以答案是3.对于[2,3,1]的第二个窗口,有1个非递减子范围和1个非递增,因此答案为0.对于[3,1,1]的第三个窗口,有1个非递减子范围和3个非递增子系数,因此答案为-2。
答案 0 :(得分:7)
给定窗口大小为6,序列
5 5 4 1 8 7
非递减子序列
5 5
1 8
和非增加的子序列是
5 5
5 4
4 1
8 7
5 5 4
5 4 1
5 5 4 1
对于非递减子序列,+2
为-7
,对于非递增子序列,-5
为{{1}}作为最终答案。