我在使用int []数组时遇到问题,并将它们添加到List<>中。我想将int []数组的值添加到每个循环的内容中,但每次执行此操作时,我的“something”会为我添加的每个元素获取相同的值。很烦人。我理解数组总是引用变量。然而,即使是“新”关键词似乎也没有帮助。需要做的是将结果添加到某个枚举对象,如List或Array或ArrayList。
这是codility问题:
您将获得N个计数器,最初设置为0,您可以对它们进行两种操作:
给出了M个整数的非空零索引数组A.此数组表示连续操作:
例如,给定整数N = 5且数组A使得:
A[0] = 3
A[1] = 4
A[2] = 4
A[3] = 6
A[4] = 1
A[5] = 4
A[6] = 4
每次连续操作后计数器的值为:
(0, 0, 1, 0, 0)
(0, 0, 1, 1, 0)
(0, 0, 1, 2, 0)
(2, 2, 2, 2, 2)
(3, 2, 2, 2, 2)
(3, 2, 2, 3, 2)
(3, 2, 2, 4, 2)
目标是在所有操作之后计算每个计数器的值。
我从其他人复制了一些代码,变量“result”确实正确地加载了数据。我只是想把它复制回主程序,所以我可以看到它。唯一有效的方法是+ =将其添加到字符串中。因此失去了我可能获得的任何效率。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testarray
{
class Program
{
static void Main(string[] args)
{
int[] A = new int[7];
A[0] = 3;
A[1] = 4;
A[2] = 4;
A[3] = 6;
A[4] = 1;
A[5] = 4;
A[6] = 4;
List<int[]> finish = solution(5, A);
}
public static List<int[]> solution(int N, int[] A)
{
int[] result = new int[N];
int maximum = 0;
int resetlimit = 0;
int iter = 0;
List<int[]> collected_result = new List<int[]>;
for (int K = 0; K < A.Length; K++)
{
if (A[K] < 1 || A[K] > N + 1)
{
throw new InvalidOperationException();
}
if (A[K] >= 1 && A[K] <= N)
{
if (result[A[K] - 1] < resetlimit)
{
result[A[K] - 1] = resetlimit + 1;
}
else
{
result[A[K] - 1]++;
}
if (result[A[K] - 1] > maximum)
{
maximum = result[A[K] - 1];
}
}
else
{
resetlimit = maximum;
result = Enumerable.Repeat(maximum, result.Length).ToArray<int>();
}
collected_result.Add(result);
}
// for (int i = 0; i < result.Length; i++)
//result[i] = Math.max(resetLimit, result[i]);
return collected_result;
}
}
}
这不起作用,gather_result最终结果如下:
(0,0,1,2,0)
(0,0,1,2,0)
(0,0,1,2,0)
(3,2,2,4,2)
(3,2,2,4,2)
(3,2,2,4,2)
(3,2,2,4,2)
我知道这行是gather_result.Add(结果);每次将引用添加到List&lt;&gt;中的每个结果实例。烦。我试过添加“new”这是一个编译器错误。最后在绝望中我只是将所有内容添加到一个很长的字符串中。有人可以帮我弄清楚如何正确加载一个对象传回主要?
答案 0 :(得分:2)
最简单的方法:
在将数组添加到列表之前获取数组的副本:
collected_result.Add(result.ToArray());
答案 1 :(得分:0)
这是一个Python解决方案: def解决方案(A,N): lenA = len(A) k = 0 max_counter_value = 0 counter = [0表示范围内的x(0,N)]
for k in range(0, lenA):
if A[k] >= 1 and A[k] <= N:
counters[A[k] - 1] += 1
max_counter_value = max(counters)
if A[k] == N + 1:
counters = [max_counter_value for x in range(0, N)]
print counters
A = [3,4,4,6,1,4,4] N = 5
溶液(A,N)