我是计算机科学领域的新手。我希望能够在现场找到我的第一份工作。这是SF的Salesforce实习,我得到了这个问题。我不确定从哪里开始。任何帮助或只是指出我正确的方向将不胜感激。谢谢你和节日快乐。
问题在于: 考虑一种情况,你有一个整数列表,需要将它分成两个单独的列表,其中两个列表中的整数之和相等或接近相等。每个子列表必须至少包含一个元素。请描述解决此问题的两种方法。第一种方法应该使用准确的算法,第二种方法应该使用更快的算法。为了澄清,我们对准确方法的定义确保找到符合我们要求的最佳答案"。对于更快的解决方案,我们仍然希望您的算法在大多数时间找到正确的答案。算法不应该具有相同的Big-O表示法。
答案 0 :(得分:0)
具有O(n log-n)复杂度的近似算法:
具有复杂性的精确解(2 ^ n):
答案 1 :(得分:0)
这是一个针对您的问题的愚蠢的简单解决方案,可能接近最佳答案,但不能保证。这是一个c#版本,我不知道你在用它做什么语言。
我会留给你找一个能保证获得最佳答案的版本。
public void SplitLists()
{
var numbers = new int[100];
var ran = new Random();
for (var i = 0; i < numbers.Length; i ++)
{
numbers[i] = ran.Next(10) + 1;
}
var list1 = new List<int>();
var list2 = new List<int>();
foreach (var num in numbers)
{
if(list1.Sum() + num < list2.Sum())
list1.Add(num);
else
list2.Add(num);
}
}