打印表格中的每个数字都大于其右边的所有数字

时间:2017-02-20 16:23:41

标签: algorithm

我必须构建一个算法,打印一个表格中的每个数字,这个数字大于其右边的所有数字。例A = {93,24,57,29,41}。应打印93,57,41。这是我做的:

Algorithm leader(A[0:n-1],n)

k=0;
for i=0 to n-2 do
{ for j=i+1 to n-1 do
{  if A[i]>A[j]
    then {k=k+1;
          B[k]=A[i];}}
k=k+1
B[k]=A[n-1] //Adds the last number of the table.
return B;

2 个答案:

答案 0 :(得分:0)

您的实施是错误的。要正确实施您的方法,您需要检查当前左侧项目是否在右侧的所有其余项目中更大。可能的伪代码:

for i=0 to n-1 do
  j = i + 1
  while (j < n) and (A[j] < A[i])
     j++
  if j == n  //we did not meet greater element
      output A[i]

  //possible optimization - jump to the next candidate
  //else
  //   i = j

答案 1 :(得分:-1)

嗯,我建议你倒退并保存你遇到的最大数字。

因此,如果当前的数字大于此值,您将检查当前数字,然后应该打印它应该是您最大的数字。如果不是,它不会大于右边的所有数字。 :)

修改

没有你的解决方案不起作用。在您的示例中,结果将是:93,93,93,93,57,57,41,因为您将继续检查数字A [i]是否大于A [j]并一次又一次地添加它。您可以通过执行以下操作来阻止此操作:

for i=0 to n-2 do{ 
    for j=i+1 to n-1 do{  
        if A[i]<A[j] then {
            <boolean flag = false>
        }
    }
if <boolean flag> then {
    k=k+1;
    B[k]=A[i];
    }
}

k=k+1
B[k]=A[n-1]

注意 我已经从&gt;更改了支票的标志。到&lt;。你在第一个for循环中也缺少'}'。