我必须构建一个算法,打印一个表格中的每个数字,这个数字大于其右边的所有数字。例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;
答案 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循环中也缺少'}'。