暴力破解 twosum 算法
Posted
技术标签:
【中文标题】暴力破解 twosum 算法【英文标题】:Brute forcing the twosum algorithm 【发布时间】:2017-07-04 23:29:21 【问题描述】:二和问题是:
给定 nums = [2, 7, 11, 15],target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]。
我正在学习 java 并且遇到了一些 leetcode 问题。在我编写代码以提高效率之前,我试图想出一个蛮力解决方案,但我的代码似乎无法编译:
public class TwoSum
//static int[] arraynums = new int[]2, 7, 11, 15;
//static int target = 9;
//public static void main(String args[])
//
//TwoSum name = new TwoSum();
//name.twoSums(arraynums, target);
//
public int twoSums(int[] nums, int target)
int sum = 0;
for (int i = 0; i < nums.length; i++)
for (int j = 0; j < nums.length; j++)
sum = nums[i] + nums[j];
if (sum == target)
System.out.println(i + " " + j);
return new int[] i,j;
return new int[] ;
我知道我需要一个 return 语句,但我不确定我应该返回什么,我也不确定是否需要我的 main 方法。
【问题讨论】:
当您编写public int[] twoSum(...
时,您是在说您的方法 twoSum(...) 将返回一个 int 元素数组。看来您想做其他事情。检查您的方法定义基础知识。
【参考方案1】:
@Alfabravo 是对的。您需要返回一个整数数组。如果你不想退货。只需使用
public void twoSum(int[] nums, int target)
【讨论】:
它也会以这种方式运行。同样在 main 方法中,只需像这样实例化类。 TwoSum name = new TwoSum(); name.twoSum("arraynums", "target");【参考方案2】:你在正确的轨道上!
关于添加return
语句,只需在 println 语句之后添加即可。
...
System.out.println(i + " " + j);
return new int[] i,j;
...
尽管您需要检查i
和j
是否不相等,因为如果它们相等,它们将指向nums
中的相同数字。 除非这不是问题的要求。如果是,您可以添加类似
if (sum == target && i != j)
祝你好运。
【讨论】:
当我添加这个 return 语句时,我仍然得到一个错误,我缺少一个 return 语句:( 它是因为并非所有代码路径都返回一个值。在函数的最后添加return false
,它应该可以工作。
嗯TwoSum.java:19:错误:不兼容的类型:意外的返回值返回新的int [] i,j; ^ TwoSum.java:24:错误:不兼容的类型:意外的返回值返回 false; ^
对不起不是return false
(我在想什么)你应该返回指定的返回类型,在你的情况下是int
数组 - 这将是`return new int[] ; (一个空数组,因为没有两个和。
我知道你要去哪里,但仍然出现错误 TwoSum.java:23: error: incompatible types: unexpected return value return new int[] i,j; ^ TwoSum.java:28: 错误:不兼容的类型:意外的返回值 return new int[] ; ^【参考方案3】:
对于 leetCode,您只需完成代码,无需添加 main 函数。
对于您的 twoSum 方法,您需要返回一个 int 类型的 array,其中包含元素的索引。
你可以这样测试:
public static void main(String args[])
int[] testData = 2, 7, 11, 15;
int target = 9;
TwoSum ts = new TwoSum();
int[] result = ts.twoSum(testData, target);
for (int i = 0; i < result.length; i++)
System.out.println(result[i]);
【讨论】:
我自己也是这样做的(这样我才能完全理解 Java 是如何使用的) 是的,打印出来非常有用,这样您就可以检查您的逻辑。【参考方案4】:public class Solution
public int[] twoSum(int[] num, int target)
// Take an array and the target number as parameter
// Initialize the variables
int length = num.length;
int index1 = 0;
int index2 = 0;
int i;
int j;
for (i=0; i<length; i++)
// First loop, i starts at num[0] which is the first element in array
for (j=i+1; j<length; j++)
// Second loop, j starts at num[1], the second element
if (num[i] + num[j] == target)
// If they are equal return the index
index1 = i;
index2 = j;
// The result should be an array contains 2 indices
int[] result = new int[] index1, index2;
return result;
遍历每个元素 x 并查找是否有另一个值等于 target-x。
【讨论】:
能否请您描述一下代码的工作原理以上是关于暴力破解 twosum 算法的主要内容,如果未能解决你的问题,请参考以下文章