09.09 科大讯飞笔试第三题AC
这题是求一个数组的子数组,任意一个 ≥ 2的窗口中元素的均值都大于给定值,求这样一个子数组的最大长度。一趟遍历就可以完成。
考虑这样一个性质,因为窗口最小是2,所以子数组中,任意两个相邻元素的均值必须 ≥ m,因此我们可以用一个栈来记录这个最长子数组。
遇到本身<m的元素,拉出来和栈顶元素求均值,≥ m就入栈(这里如果是连续好几个<m的元素连在一块儿,就取他们中的最大值)
本身就 ≥ m的元素,直接入栈就行。
还需要注意处理栈内元素>1的情况,比如给的测试用例【1,9,1】,相邻的两个元素均值都是 ≥ 5,但是三个连在一起就不是了,所以后面那个1不能入栈。
其实本质就是,只要保证连续两个元素的均值 ≥ m,而且连续三个元素的均值 ≥ m,就可以保证所有窗口的均值都 ≥ m,因为2和3能保证覆盖所有的奇偶数。
最后一趟扫描完,栈的大小就是结果。
考虑这样一个性质,因为窗口最小是2,所以子数组中,任意两个相邻元素的均值必须 ≥ m,因此我们可以用一个栈来记录这个最长子数组。
遇到本身<m的元素,拉出来和栈顶元素求均值,≥ m就入栈(这里如果是连续好几个<m的元素连在一块儿,就取他们中的最大值)
本身就 ≥ m的元素,直接入栈就行。
还需要注意处理栈内元素>1的情况,比如给的测试用例【1,9,1】,相邻的两个元素均值都是 ≥ 5,但是三个连在一起就不是了,所以后面那个1不能入栈。
其实本质就是,只要保证连续两个元素的均值 ≥ m,而且连续三个元素的均值 ≥ m,就可以保证所有窗口的均值都 ≥ m,因为2和3能保证覆盖所有的奇偶数。
最后一趟扫描完,栈的大小就是结果。
全部评论
样例[9,2,6] 要求均值5 按照思路全部入栈了 但是2,6这个就不符合了
哥,有代码吗?
第一题用multiset直接暴力循环两遍,输出count == b的数字,第二题游程编码
楼主思路写的,不知道对不对,可以参考一下
相关推荐

点赞 评论 收藏
分享
03-20 14:30
北京邮电大学 管理咨询 点赞 评论 收藏
分享