不使用 Count 功能对段进行计数

如何解决不使用 Count 功能对段进行计数

我遇到了下一个问题:给定一个数组,计算发生这种情况的长度为 k 的段数;片段左半部分的阳性数大于或等于右半部分。

举个例子(想象段只能是偶数,所以没有关于一半是什么的讨论):

k=2 ---> count(array[-4,-2,2,1],k) ---> 2,as [-4,-2] fulfills and also [2,1]
k=4 ---> count(array[-4,k) ---> 0,1] does not fulfil.
k=6 ---> count(array[-4,as there are not length 6 segments.

我使用函数 Count 以一种简单的方式递归地解决了这个问题:我从左到右移动数组,枚举所有长度为 k 的段,并对每个段应用计数。它是在达夫尼完成的:

function method Count_segments(sequ: seq<int>,seg_length:int): int
{
  if |sequ| == 0 then 0
  else (if (Count(x => x >= 0,sequ[0..seg_length/2])) >= (Count(x => x >= 0,sequ[seg_length/2..seg_length])) then
        1 + if (|sequ|-1 < seg_length) then 0 //I add the condition that says that if in the next iteration,sequ will be smaller than the sequence_length,then we end.
            else Count_segments(sequ[1..],seg_length)
       else if (|sequ|-1 < seg_length) then 0
            else Count_segments(sequ[1..],seg_length)
       )
}

但是,很明显,使用 Count,我不会迭代地进行线性搜索(在第一个示例中,不是搜索 4 次,而是搜索 6 次)。我想在 O(n) 中实现它,但找不到任何信息,有人有想法吗?我不在乎编程语言(可以用任何语言回答我),而在乎算法本身。

谢谢!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?