C# 如何获取包含最小差异数组元素的数组
我们必须根据要选择的项目输入3选择最佳项目。我们的选择应该是这样的,我们不总是采取最大的项目。我们取而代之的是差异不大的项目C# 如何获取包含最小差异数组元素的数组,c#,arrays,algorithm,equation-solving,C#,Arrays,Algorithm,Equation Solving,我们必须根据要选择的项目输入3选择最佳项目。我们的选择应该是这样的,我们不总是采取最大的项目。我们取而代之的是差异不大的项目 input1: total items input2: array of items input3: items to be selected Scenario 1: input: 6, {44,55,605,100,154,190}, 1 output should be: {605} input: 5, {15,85,32,31,2}, 2 output shou
input1: total items
input2: array of items
input3: items to be selected
Scenario 1:
input: 6, {44,55,605,100,154,190}, 1
output should be: {605}
input: 5, {15,85,32,31,2}, 2
output should be: {32,31}
当我们增加要选择的项的数量时,输出中应该有更多的项以最小的差异被选择。
以下是我正在尝试的代码,我是新手,请帮助:
我被困在如何使这个动态
public static int[] Find(int totalItems, int[] values, int totalToBeSelected)
{
var i = values;
int[] results = new int[totalToBeSelected];
var resultList = new List<int>();
if (totalToBeSelected == 1)
{
resultList.Add(values.Max());
return resultList.ToArray();
}
Array.Sort(i);
var minmumDiff = (i[0] - i[1]) * -1;
for (int k = 1; k < i.Length; k++)
{
var differnce = i[k] - i[k - 1];
if (differnce < minmumDiff)
{
resultList.Add(i[k]);
resultList.Add(i[k - 1]);
minmumDiff = differnce;
}
}
return resultList.ToArray();
}
public static int[]Find(int totalItems,int[]值,int totalToBeSelected)
{
var i=价值;
int[]结果=新的int[totalToBeSelected];
var resultList=新列表();
如果(totalToBeSelected==1)
{
Add(values.Max());
返回resultList.ToArray();
}
数组.排序(i);
var minmumDiff=(i[0]-i[1])*-1;
对于(int k=1;k
问题中的条件不清楚,必须做出一些假设
class Program
{
static void Main(string[] args)
{
var items = new[] {12,14,22,24,6};//new[] { 15, 85, 32, 31, 2};//new[] { 44, 55, 605, 100, 154, 190 };
var totalItems = items.Count();
var numberOfItemsToSelect = 3;
var result = Find(totalItems, items, numberOfItemsToSelect);
PrintList(result);
Console.ReadLine();
}
static void PrintList(IEnumerable<int> scoreList)
{
foreach (var score in scoreList)
{
Console.Write(score);
Console.Write(" ");
}
}
public static int[] Find(int totalItems, int[]values, int totalTobeSelected)
{
var result = new List<int>();
if (totalTobeSelected <= 1)
{
result.Add(values.Max());
}
else if (totalTobeSelected == totalItems)
{
result.AddRange(values.OrderBy(i => i).ToList());
}
else
{
var mainSet = values.OrderBy(i => i).ToList();
var setDic = new Dictionary<int, IEnumerable<int>>();
for (int i = 0; (totalItems - i >= totalTobeSelected); i++)
{
var set = mainSet.GetRange(i, totalTobeSelected);
//Inside a set, we choose the difference between the first and the second number
// ex: set = {2, 4, 9} => diff = |2-4| = 2.
var diff = Math.Abs(set[0] - set[1]);
// given two sets with the same diff, we select the first one base on the sort order of the main set:
// ex: main set = {2,4,8,10}. Both {2,4} and {6,8} have a diff of 2 so we select {2,4}
if (setDic.ContainsKey(diff)) continue;
setDic.Add(diff, set);
}
if (setDic.Count > 0)
{
var minKey = setDic.Keys.Min();
result.AddRange(setDic[minKey]);
}
}
return result.ToArray();
}
}
类程序
{
静态void Main(字符串[]参数)
{
var items=new[]{12,14,22,24,6};//new[]{15,85,32,31,2};//new[]{44,55,605,100,154,190};
var totalItems=items.Count();
var numberOfItemsToSelect=3;
var结果=查找(totalItems、items、numberOfItemsToSelect);
打印列表(结果);
Console.ReadLine();
}
静态无效打印列表(IEnumerable scoreList)
{
foreach(分数表中的var分数)
{
控制台。写入(分数);
控制台。写(“”);
}
}
公共静态int[]查找(int totalItems、int[]值、int totalTobeSelected)
{
var result=新列表();
如果(totalTobeSelected i.ToList());
}
其他的
{
var mainSet=values.OrderBy(i=>i.ToList();
var setDic=新字典();
对于(int i=0;(totalItems-i>=totalTobeSelected);i++)
{
var set=mainSet.GetRange(i,totalTobeSelected);
//在集合中,我们选择第一个数字和第二个数字之间的差值
//例如:set={2,4,9}=>diff=| 2-4 |=2。
var diff=Math.Abs(集合[0]-set[1]);
//给定两个具有相同差异的集合,我们根据主集合的排序顺序选择第一个集合:
//主集合={2,4,8,10},{2,4}和{6,8}的差值都是2,所以我们选择{2,4}
如果(设置容器(差异))继续;
设置。添加(差异,设置);
}
如果(setDic.Count>0)
{
var minKey=setDic.Keys.Min();
result.AddRange(setDic[minKey]);
}
}
返回result.ToArray();
}
}
问题中的条件不清楚,必须做出一些假设
class Program
{
static void Main(string[] args)
{
var items = new[] {12,14,22,24,6};//new[] { 15, 85, 32, 31, 2};//new[] { 44, 55, 605, 100, 154, 190 };
var totalItems = items.Count();
var numberOfItemsToSelect = 3;
var result = Find(totalItems, items, numberOfItemsToSelect);
PrintList(result);
Console.ReadLine();
}
static void PrintList(IEnumerable<int> scoreList)
{
foreach (var score in scoreList)
{
Console.Write(score);
Console.Write(" ");
}
}
public static int[] Find(int totalItems, int[]values, int totalTobeSelected)
{
var result = new List<int>();
if (totalTobeSelected <= 1)
{
result.Add(values.Max());
}
else if (totalTobeSelected == totalItems)
{
result.AddRange(values.OrderBy(i => i).ToList());
}
else
{
var mainSet = values.OrderBy(i => i).ToList();
var setDic = new Dictionary<int, IEnumerable<int>>();
for (int i = 0; (totalItems - i >= totalTobeSelected); i++)
{
var set = mainSet.GetRange(i, totalTobeSelected);
//Inside a set, we choose the difference between the first and the second number
// ex: set = {2, 4, 9} => diff = |2-4| = 2.
var diff = Math.Abs(set[0] - set[1]);
// given two sets with the same diff, we select the first one base on the sort order of the main set:
// ex: main set = {2,4,8,10}. Both {2,4} and {6,8} have a diff of 2 so we select {2,4}
if (setDic.ContainsKey(diff)) continue;
setDic.Add(diff, set);
}
if (setDic.Count > 0)
{
var minKey = setDic.Keys.Min();
result.AddRange(setDic[minKey]);
}
}
return result.ToArray();
}
}
类程序
{
静态void Main(字符串[]参数)
{
var items=new[]{12,14,22,24,6};//new[]{15,85,32,31,2};//new[]{44,55,605,100,154,190};
var totalItems=items.Count();
var numberOfItemsToSelect=3;
var结果=查找(totalItems、items、numberOfItemsToSelect);
打印列表(结果);
Console.ReadLine();
}
静态无效打印列表(IEnumerable scoreList)
{
foreach(分数表中的var分数)
{
控制台。写入(分数);
控制台。写(“”);
}
}
公共静态int[]查找(int totalItems、int[]值、int totalTobeSelected)
{
var result=新列表();
如果(totalTobeSelected i.ToList());
}
其他的
{
var mainSet=values.OrderBy(i=>i.ToList();
var setDic=新字典();
对于(int i=0;(totalItems-i>=totalTobeSelected);i++)
{
var set=mainSet.GetRange(i,totalTobeSelected);
//在集合中,我们选择第一个数字和第二个数字之间的差值
//例如:set={2,4,9}=>diff=| 2-4 |=2。
var diff=Math.Abs(集合[0]-set[1]);
//给定两个具有相同差异的集合,我们根据主集合的排序顺序选择第一个集合:
//主集合={2,4,8,10},{2,4}和{6,8}的差值都是2,所以我们选择{2,4}
如果(设置容器(差异))继续;
设置。添加(差异,设置);
}
如果(setDic.Count>0)
{
var minKey=setDic.Keys.Min();
result.AddRange(setDic[minKey]);
}
}
返回result.ToArray();
}
}
您可以查看此函数
public static int[] Find(int totalItems, int[] values, int totalToBeSelected)
{
Array.Sort(values);
Array.Reverse(values); // We need any value greater than max items diff. Max array item (first item after the sort) enough for it.
int diff = values[0];
int indx = 0;
for (int i = 0; i < totalItems - totalToBeSelected +1; i++)
{
int temp_diff = values[i] - values[i + totalToBeSelected - 1]; // We are looking for any items group that max and min value difference is minimum
if (temp_diff < diff )
{
diff = temp_diff;
indx = i;
}
}
int[] results = new int[totalToBeSelected];
Array.Copy(values, indx, results, 0, totalToBeSelected);
return results;
}
你可以看看这个函数
public static int[] Find(int totalItems, int[] values, int totalToBeSelected)
{
Array.Sort(values);
Array.Reverse(values); // We need any value greater than max items diff. Max array item (first item after the sort) enough for it.
int diff = values[0];
int indx = 0;
for (int i = 0; i < totalItems - totalToBeSelected +1; i++)
{
int temp_diff = values[i] - values[i + totalToBeSelected - 1]; // We are looking for any items group that max and min value difference is minimum
if (temp_diff < diff )
{
diff = temp_diff;
indx = i;
}
}
int[] results = new int[totalToBeSelected];
Array.Copy(values, indx, results, 0, totalToBeSelected);
return results;
}
看起来像是Techgig的问题,不是吗?你能发布问题的实际问题陈述吗?不清楚你是如何从输入中得到输出的。另外,您给代码提供了什么输入,它提供了什么输出,您想要什么输出?你能发一封信吗?您是否已在调试器或添加打印语句中检查了您的代码,以查看它与您预期的不同之处?@Dukeling我已更新了问题,如果您需要更多信息,请告诉我,谢谢。请到StackOverflow来。请阅读并遵循帮助文档中的发布指南。适用于这里。我们不能