找到最小正值

Ray*_*Ray 7 delphi algorithm optimization

从固定数字(在本例中为3)中找到最小非零正值的最佳算法是什么,如果没有正问题则返回0?

我的天真方法如下(在Delphi中,但随意使用你喜欢的任何东西),但我认为有一种更优雅的方式.

value1Temp := MaxInt;
value2Temp := MaxInt;
value3Temp := MaxInt;

if ( value1T > 0) then
  value1Temp := value1;
if ( value2 > 0) then
  value2Temp := value2;
if ( value3 > 0) then
  value3Temp  := value3;

Result := Min(value1Temp, Min(value2Temp, value3Temp));
if Result = MaxInt then
  Result := 0;
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,如果没有正数,则添加所需内容.我以为我以前曾经在那里,但一定错过了它.

lke*_*ler 3

我会这样做:

结果:= MaxInt;
如果 value1 > 0 则 Result := min(Result, value1);
如果 value2 > 0 则 Result := min(Result, value2);
如果 value3 > 0 则 Result := min(Result, value3);
如果结果 = MaxInt 则结果 := 0;

如果您希望它循环出现任意数量的问题,那么:

结果:= MaxInt;
for I := 1 to N
   if value[I] > 0 then Result := min(Result, value[I]);
如果结果 = MaxInt 则结果 := 0;

如果您希望值数组从零开始,请将 for 循环更改为:0 到 N-1

我认为这段代码非常清楚地说明了正在做什么。

在这个简单的情况下,将“then”语句放在同一行可以使代码看起来更干净,但如果您认为有必要,可以随意将“then”语句缩进到下一行。