我正在尝试解决一个问题,即检查给定int []中的任何两个元素值的SUM是否等于给定的总和值,返回true,检查所有元素后未发现任何结果,返回false。 >
我使用嵌套的for..loop轻松解决了这个问题,如下所示:
public bool CheckValue (int[] given,int sum) {
if (given == null) {
return false;
} else if (given.Length == 0 || given.Length == 1) {
return false;
} else {
for (int i = 0; i < given.Length - 1; i++) {
for (int j = i + 1; j < given.Length; j++) {
if ((given[i] + given[j]) == sum) {
return true;
}
}
}
return false;
}
}
但是我想在第二个循环中使用Hashtable来解决它,因为它将简化搜索过程并尝试了以下代码:
private static bool CheckValueUsingHashTable (int[] given,int sum) {
if (given == null) {
return false;
} else if (given.Length == 0 || given.Length == 1) {
return false;
} else {
Hashtable hashs = new Hashtable ();
for (int i = 0; i < given.Length; i++) {
hashs.Add (i,given[i]);
}
for (int j = 0; j < given.Length; j++) {
int valueToAdd = sum - given[j];
if (hashs.ContainsValue (valueToAdd)) {
return true;
}
}
return false;
}
}
我现在面临的问题是,如果给定数组为{1,2,3,4}且给定总和为2,它可以将第一个元素与自身相加并返回TRUE,但是显然,我不希望那样发生。
所以,请问如何从哈希表中搜索值并获取密钥。当前,该函数根据存在的值返回TRUE或FALSE。