在Python中找出隐藏数组中最频繁元素的索引的程序
假设我们有一个名为“TestArray”的类,它包含一个只能包含值 0 或 1 的私有数组;和两个公共成员函数length()和query()。该函数length()返回数组的长度,该函数query()返回三个不同的值,比较数组中的各种值。该函数采用四个值 p、q、r、s 作为输入,其工作原理如下 -
如果数组给定索引中的所有四个值都是 0 或 1,则返回 4。
否则如果数组给定索引中的任何三个值相同而第四个值不同,则返回 2。
否则,如果数组在数组的给定索引中包含两个值 0 和两个值 1,则返回 0。
我们必须在不访问数组本身并仅使用类的成员函数的情况下,找出数组中出现频率最高的元素的索引。如果数组中有相同数量的 0 和 1,则返回值 -1。
因此,如果输入类似于 array = [0, 1, 1, 0, 1, 1, 1, 0].,那么输出将是 2 在数组的索引 2 中,值是 1,这是最频繁的数组中的值。同样,答案 1、4、5、6 也为真,因为索引也包含值 1。
示例(Python)
让我们看看以下实现以获得更好的理解 -
class TestArray:def __init__(self, array) -> None:
self.__arr= array
def length(self):
return len(self.__arr)
def query(self, p, q, r, s):
val = self.__arr[p] + self.__arr[q] + self.__arr[r] + self.__arr[s]
if val == 4 or val == 0:
return 4
elif val == 1 or val == 3:
return 2
elif val == 2:
return 0
def solve(reader):
n,groupA,groupB,aIdx,bIdx=reader.length(),1,0,None,None
first,second=reader.query(0,1,2,3),reader.query(0,1,2,4)
for i in range(4,n):
if reader.query(0,1,2,i)==first:
groupA,aIdx=groupA+1,i
else:
groupB,bIdx=groupB+1,i
for i in range(3):
nxt=[v for v in [0,1,2,3,4] if v!=i]
if reader.query(*nxt)==second:
groupA,aIdx=groupA+1,i
else:
groupB,bIdx=groupB+1,i
return aIdx if groupA>groupB else bIdx if groupB>groupA else -1
arr_ob = TestArray([0, 1, 1, 0, 1, 1, 1, 0])
print(solve(arr_ob))
输入
[0, 1, 1, 0, 1, 1, 1, 0]输出结果
2
以上是 在Python中找出隐藏数组中最频繁元素的索引的程序 的全部内容, 来源链接: utcz.com/z/322738.html