我被问到以下问题要编程,下面是我创建的代码。有没有更好的方法呢?谢谢,
实施ClosestToZero方法,使温度接近零,属于数组ts。
•如果ts为空,则返回0(零)
•如果两个数字接近零,则将正整数视为接近零(例如-5和5,返回5) 输入:
•温度始终以浮点数表示,范围为-273 to 5526
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
double[] ts = { 7, 12, -2, 8, 1 };
var result = closetozero(ts);
Console.WriteLine(result);
}
public static double closetozero(double[] ts)
{
int targetNumber = 0;
var nearest = ts.OrderBy(x => Math.Abs((long)x - targetNumber)).First();
return nearest;
}
}
}
答案 0 :(得分:0)
正如Sweeper所说,定义“更好”。
就运行时而言:抛弃LINQ,写出循环。问题是你的方法构建一个值列表然后对它们进行排序(O(n log n)。一个简单的循环没有内存分配并且在O(n)时间内运行。
另外,我认为+5在你的代码中比-5更受欢迎,这使得它明显错误。
答案 1 :(得分:0)
“更好”的方式是使用ForEach
并将最接近的零存储起来,并考虑+/-。没有理由对整个数组进行排序。
答案 2 :(得分:0)
尝试一下:
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
class Solution
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
string[] inputs = Console.ReadLine().Split(' ');
int closest=0;
if(n>0)
{
closest=int.Parse(inputs[0]);
for (int i = 1; i < n; i++)
{
int t = int.Parse(inputs[i]);
if(Math.Abs(closest-0)>Math.Abs(t-0))
{closest=t;}
else if(Math.Abs(closest-0) == Math.Abs(t-0))
{
if(closest-Math.Abs(closest)==0 && t-Math.Abs(t)==0)
{closest=closest;}
else if(closest-Math.Abs(closest)==0)
{closest=closest;}
else if(t-Math.Abs(t)==0)
{closest=t;}
}
}
}
Console.WriteLine(closest);
}
}
答案 3 :(得分:0)
public static double ClosestToZero(double[] ts)
{
if(ts == null || ts.LongLength ==0 )
return 0;
double a = ts[0];
double b;
for(int i = 0; i <= ts.LongLength-1; i++){
if(Math.Abs(a) > Math.Abs(ts[i])){
a = ts[i];
}
else if(Math.Abs(a) == Math.Abs(ts[i]))
{
a = a > ts[i] ? a : Maths.Abs(ts[i]);
}
}
return a;
}
答案 4 :(得分:-1)
试试这个:
sudo apt-get install --reinstall mongodb
答案 5 :(得分:-1)
const hex = crc.toString(16).padStart(8, '0')