Java 双和返回语句不返回任何内容
我试图解决一个问题,我必须在一个数组中添加两个元素来等于一个目标整数值。我认为我的代码是正确的,将返回所需的目标,但是return语句没有返回任何值。这是为什么?我如何修复它 谢谢Java 双和返回语句不返回任何内容,java,for-loop,return,conditional-statements,Java,For Loop,Return,Conditional Statements,我试图解决一个问题,我必须在一个数组中添加两个元素来等于一个目标整数值。我认为我的代码是正确的,将返回所需的目标,但是return语句没有返回任何值。这是为什么?我如何修复它 谢谢 public static void main(String[] args) { int[] nums= {2,7,11,15}; int target= 9; } public int twoSum(int[] nums, int target) { int res
public static void main(String[] args) {
int[] nums= {2,7,11,15};
int target= 9;
}
public int twoSum(int[] nums, int target) {
int result=0;
for(int i = 0; i<nums.length ;i++){
for(int j=i+1; j<nums.length ;j++ ){
result = nums[i] + nums[j];
if (result == target){
return result;
}else{
break;
}
}
}
}
}
publicstaticvoidmain(字符串[]args){
int[]nums={2,7,11,15};
int目标=9;
}
公共整数twoSum(整数[]nums,整数目标){
int结果=0;
for(int i=0;ibreak
使用错误。此外,您必须返回结果
。我不确定此代码是否编译。是吗?您也必须调用方法twoSum(…)
。我看到您的数组已排序,这意味着您实际上可以在O(n)中解决问题
使用两个指针计时:左
和右
,如下所示:
import java.util.Arrays;
class Solution {
// O(n) time, O(1) space
private static boolean twoNumberSum(int[] array, int sum) {
if (array.length < 2) {
return false;
}
int left_idx = 0;
int right_idx = array.length - 1;
// O(n) time, O(1) space
while (left_idx < right_idx) {
int currentSum = array[left_idx] + array[right_idx];
if (currentSum < sum) {
left_idx++;
}
else if (currentSum > sum) {
right_idx--;
}
else {
return true;
}
}
return false;
}
public static void main(String ...args) {
int[] array = {2, 7, 11, 15};
int valid_sum = 9;
int invalid_sum = 10;
System.out.format("(%s, %d) -> %b\n", Arrays.toString(array), valid_sum, Solution.twoNumberSum(array, valid_sum));
System.out.format("(%s, %d) -> %b\n", Arrays.toString(array), invalid_sum, Solution.twoNumberSum(array, invalid_sum));
}
}
导入java.util.array;
类解决方案{
//O(n)时间,O(1)空间
私有静态布尔twoNumberSum(int[]数组,int和){
if(array.length<2){
返回false;
}
int left_idx=0;
int right_idx=array.length-1;
//O(n)时间,O(1)空间
while(left_idx总和){
右_idx--;
}
否则{
返回true;
}
}
返回false;
}
公共静态void main(字符串…参数){
int[]数组={2,7,11,15};
int-valid_-sum=9;
int无效_和=10;
System.out.format((%s,%d)->%b\n),array.toString(array),valid_sum,Solution.twoNumberSum(array,valid_sum));
System.out.format((%s,%d)->%b\n),Arrays.toString(数组),无效的\u和,Solution.twoNumberSum(数组,无效的\u和));
}
}
另一个对未排序数组有用的解决方案是使用hashset->O(n)时间,O(n)空间。内部循环(在j
上的循环)永远不要执行多个迭代:要么返回,要么中断。如果这是您真正想要的,您可以删除循环。如果结果等于target
,则返回似乎不是特别有用:您知道它的值是什么,它与target
相同。相反,将返回类型设置为boolean
,因此如果找到,则可以返回true(在循环内);如果没有,则返回false(在循环后)。这甚至不应该编译,因为如果从未进入循环,则不会返回。如果方法已编译(方法末尾缺少return
),该方法仍然不会返回任何内容,因为该方法从未被调用。感谢您的帮助。我现在正在尝试暴力。一旦我获得当前代码,我将尝试一种更有效的方法:)