boolean check() {
int max = min = b[0];
for (int i = 1; i < n; i++) {
if (b[i] > min && b[i] < max) return false;
if (b[i] > max) { max = b[i]; min = b[i]; }
if (b[i] > min) min = b[i];
}
return true;
}
function check:boolean;
var
max,min,k:integer;
begin
max:=b[0]; min:=b[0];
for k:=1 to n-1 do begin
if (b[k]>min) and (b[k]<max) then begin
check:=false;
exit;
end;
if min>b[k] then min:=b[k];
if max<b[k] then begin
max:=b[k]; min:=b[k];
end;
end;
check:=true;
end; 这次不要效率了。
如果简化一下问题,假设a数组的值是0..n-1,从小到大。
那么
boolean check() {
int max = b[0];
for (int i = 1; i < n; i++) {
if (b[i] > b[i - 1]) {
if (b[i] > max) {
max = b[i];
return false;
if (b[i] > max) max = b[i];
}
return true;
}
基本思想是如果b中出现过x,那么比x小的数字只可能从大到小输出。
我这个想法可以吗?