给出一个整数数组,返回两个数字的索引,以便它们加起来成为一个特定的目标。
您可以假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
示例:
给出数字= [2,7,11,15],目标= 9,
因为nums [0] + nums [1] = 2 + 7 = 9, 返回[0,1]。
我正在尝试使用强力方法解决此问题-使用整数i遍历数组的每个元素,并使用另一个整数j向位置i处的整数添加不相同的索引。我相当确定我的方法是正确的,但是我无法正确实现此Java实现。
class Solution {
public int[] twoSum(int[] nums, int target) {
int sum;
int[] Solution = new int[2];
outerloop:
for (int i=0; i<nums.length; i++) {
for (int j=0; j<nums.length; j++) {
if (i == j) {
j = j++;
sum = nums[i] + nums[j];
if (sum == target) {
System.out.println(sum);
Solution[0] = i;
Solution[1] = j;
break outerloop;
}
}
else {
sum = nums[i] + nums[j];
if (sum == target) {
Solution[0] = i;
Solution[1] = j;
break outerloop;
}
}
}
}
return Solution;
}
}
因此,当我编译并使用数组:[2、7、11、15]和target = 9时,以上方法适用。但是当您尝试:[3、2、4]和target = 6时,它错误地返回了解决方案= [0,0]。
我看不到自己在做错什么,我已经查看了解决方案以及其他人发布的内容,然后我明白了。但是我正试图专门找出上面的代码出了什么问题。
任何帮助将不胜感激。
答案 0 :(得分:0)
在上述蛮力方法中,i == j是不正确的解决方案,因为数组的两个元素必须不同。我应该从0到nums.length,j应该从i + 1到nums.length。
答案 1 :(得分:0)
您可以执行以下操作:
public class Test {
public static void main(String args[]) {
int[] arr = { 2, 7, 11, 15 };
int target = 9;
int[] solution = twoSum(arr, target);
if (solution!=null)
for (int n : solution)
System.out.print(n + "\t");
}
public static int[] twoSum(int[] nums, int target) {
int[] solution = new int[2];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (i == j)
continue;
if (nums[i] + nums[j] == target) {
solution[0] = nums[i];
solution[1] = nums[j];
return solution;
}
}
}
return null;
}
}
输出:
2 7
答案 2 :(得分:0)
从技术上讲,您的问题在def aa(x):
return x - np.mean(x)
file.groupby(["City"]).agg({"Wind direction":[np.mean, aa], "Temperature":["mean", aa]})
,您需要使其像j = j++;
。参见here。