algorithm - 找到最小正值

标签 algorithm delphi 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;

编辑:如果没有正数,抱歉添加了所需内容。我以为我以前有它,但一定是错过了。

最佳答案

我会这样做:

Result := MaxInt;
if value1 > 0 then Result := min(Result, value1);
if value2 > 0 then Result := min(Result, value2);
if value3 > 0 then Result := min(Result, value3);
if Result = MaxInt then Result := 0;

如果您希望它在一个包含任意数量问题的循环中,那么:

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

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

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

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

关于algorithm - 找到最小正值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376657/

相关文章:

algorithm - 不是那么面向数学的欧拉计划问题

delphi - 使用frame2访问frame1的组件,其中frame2在frame1上,在delphi中,动态创建帧

c++ - 如何在不并行的情况下提高我的反向传播 ANN 的性能

algorithm - 在附加条件下查找数组中可能的序列数

具有 3 列键的 Java Map

c# - 计算第 N 个 Pi 数字

delphi - 在满足条件之前暂停程序执行的更好方法是什么?

delphi - 使用 Delphi 在运行时创建 TWebBrowser

algorithm - 使用 Scala 的动态编程来解决来自 CodeChef 的 Mixture

java - JIT可以优化这种不必要的调用吗?