假设nxn数组A的每一行由1和0组成,使得在A的任何行i中,所有1都在该行中的任何0之前。进一步假设第i行中的1的数量为至少行i + 1中的数字,对于i = 0,1,2,....,n-2 假设A已经在内存中,请描述在O(n)时间运行的方法,用于计算数组A中1的数量。
所以我的方法是从A [n-1,0]开始,如果== 1我们加上1的其他数字我们上升和右边 所以我们扫描A只向右和向上移动
答案 0 :(得分:0)
双回路:
SUM = 0
j = 0
for i from n-1 to 0 step -1 do {
while (j<n)and(A[i,j]==1) do {
j = j+1
}
SUM = SUM+j
}
单环:
SUM = 0
i = n-1
j = 0
while (i>=0)and(j<n) do {
if A[i,j]==1 then {
j = j+1
} else {
SUM = SUM+j
i = i-1
}
}