So I’m getting a little stuck From this point. About to try another function to check for negatives because I think that is the problem. Any suggestions?
using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
/**
* Auto-generated code below aims at helping you parse
* the standard input according to the problem statement.
**/
class Solution
{
public int Length {get;}
static void Main(string[] args)
{
bool areNegative = false;
string closestNumber;
int targetNumber = 0;
int n = int.Parse(Console.ReadLine()); // the number of temperatures to analyse
string[] inputs = Console.ReadLine().Split(' ');
int[] newInputs = Array.ConvertAll(inputs, int.Parse);
//start of program
for (int i = 0; i < n; i++)
{
int t = int.Parse(inputs[i]);// a temperature expressed as an integer ranging from -273 to 5526
//sets clostest number to the number closest to 0 (working on negative bug)
closestNumber = Convert.ToString(findClosest(newInputs, targetNumber));
}
// Write an answer using Console.WriteLine()
// To debug: Console.Error.WriteLine("Debug messages...");
//Checks if numbers are negative and return absolute value new value
//Work in progress
static int isNegative (int[] oldValues, int[] newInputs, int[] newValues)
{
oldValues = newInputs;
}
//compares numbers to figure out which number is closest to target number (0)
static int findClosest (int[] newInputs, int targetNumber)
{
int n = newInputs.Length;
//corner cases
if(targetNumber < newInputs[0])
{
return newInputs[0];
}
if(targetNumber > newInputs[n - 1])
{
return newInputs[n - 1];
}
//binary search
int i = 0, j = n, mid = 0;
while (i < j)
{
mid = (i + j) / 2;
if (newInputs[mid] == targetNumber)
{
return newInputs[mid];
}
/* If target is less
than array element,
then search in left */
else if (targetNumber < newInputs[mid])
{
// If target is greater
// than previous to mid,
// return closest of two
if(mid > 0 && targetNumber > newInputs[mid - 1])
{
return getClosest(newInputs[mid - 1], newInputs[mid],targetNumber);
}
j = mid;
}
else
{
if(mid < n - 1 && targetNumber < newInputs[mid + 1])
{
return getClosest(newInputs[mid + 1], newInputs[mid], targetNumber);
}
i = mid + 1;
}
}
return newInputs[mid];
}
static int getClosest(int val1, int val2, int targetNumber)
{
if(targetNumber - val1 >= val2 - targetNumber)
{
return val2;
}
else
{
return val1;
}
}
closestNumber = Convert.ToString(findClosest(newInputs, targetNumber));
Array.ForEach(inputs,Console.Error.WriteLine);
Console.Error.WriteLine("Debug message: " + "number 'closest' to 0 =" + closestNumber);
Console.WriteLine(closestNumber);
}
}