您开始没有。元素N假设N,您将得到N个数字,在下一行有一个空格。确定该数组中的个案数,使其遵循以下规则-structureblock,STRUCTURE_BLOCK
structurevoid,STRUCTURE_VOID
sugar,SUGAR
sugarcane,SUGAR_CANE
reeds,SUGAR_CANE
scane,SUGAR_CANE
reed,SUGAR_CANE
sunflower,SUNFLOWER
sugarcane,SUNFLOWER
tallgrass,TALL_GRASS
tgrass,TALL_GRASS
longgrass,TALL_GRASS
wildgrass,TALL_GRASS
lgrass,TALL_GRASS
tgrass,TALL_SEAGRASS
tseagrass,TALL_SEAGRASS
lseagrass,TALL_SEAGRASS
sugar,TERRACOTTA
hardclay,TERRACOTTA
,其中i和j是索引,i+j=array[i]+array[j]
。
例如, 输入-
i<j
输出-
5
1 0 2 4 3
说明-
4
现在,我可以使用O(n * n)遍历所有元素来解决它。您能提出优化的代码吗??
我在python中的代码如下:
Elements of array at index (0,1), (1,3), (3,4) and (0,4) follows the above rule
我在Java中的代码(摘要)如下:
n=int(input())
arr=list(map(int,input.split(' ')))
count=0
for i in range(n):
for j in range(i+1,n):
if(i+j==arr[i]+arr[j]):
count+=1
print(count)
答案 0 :(得分:1)
首先请注意条件i+j=array[i]+array[j]
等同于:
(array[i] - i) + (array[j] -- j) == 0
因此,为每个array[i] - i
计算i
。在您的示例中,您将获得[1, -1, 0, 1, -1]
。 编辑:多亏了maaartinus的评论,因为只要求成对计数,所以我们也只需要对每个计算出的差异进行计数。因此,对于每个差异,请以正差异的形式存储多少次,以负数的形式存储多少次。使用以计算出的差异为关键的地图:
0 -> 1 occrurrence (index 2)
1 -> 2 negative occurrences (indices 1, 4), 2 positive occurrences (indices 0, 3).
未存储具体索引,我仅将其包括在内作为说明。并且不要存储0条目。由于i < j
的限制,我们无法将其用于任何用途。因此,在您的示例情况下,我们只有:
1 -> 2 negative occurrences, 2 positive occurrences
现在,通过将条目中的每个索引与键-n
以及条目n
中的每个索引进行组合,可以实现我们的目标。我们需要对每一对进行排序,以便满足其他条件i < j
。由于相同的索引不会同时被视为正数和负数,因此这始终是可能的。因此,地图条目n
中的对数是负次数和正次数两次计数的乘积。在您的情况下,您只有一个n
,在其他情况下,可能会很多,因此将所有对的数目加在一起。在示例中,我们只有2 * 2 = 4对。这个结果与您的问题相符。
编辑:复杂性考虑:我方法的复杂性取决于映射操作的复杂性,而映射操作的复杂性又取决于您选择的映射实现。对于大多数地图实现,地图的构建将是耗时的部分,并且将花费O(n *地图查找成本)。假设在HashMap
中的查找介于线性和O(log n)之间,则可以得到O(n)和O(n * log n)之间的某个值。在任何情况下都比O(n ^ 2)好。
快乐的编码。
我最初的想法是生成所有对。这个想法可能更容易理解,所以我让它站在这里。但是,它的性能并不比O(n ^ 2)好。
将索引存储到多图或列表图中,其中计算出的差异为键。在示例中,您将获得
-1 -> 1, 4
0 -> 2
1 -> 0, 3
现在,通过将条目中的每个索引与键-n
以及条目n
中的每个索引进行组合,可以实现我们的目标。只有我们需要对每一对进行排序,以便满足其他条件i < j
(这总是可能的,因为相同的索引不会出现在两个列表中)。
未排序对:
(1, 0), (1, 3), (4, 0), (4, 3)
排序对(即i < j
):
(0, 1), (1, 3), (0, 4), (3, 4)
为进行比较,更正您自己的代码后会产生:
(0, 1), (0, 4), (1, 3), (3, 4)
它们是相同的4对,只是顺序不同。排序将解决问题,