
这个twosum的java题目我哪里错了?我的程序运行出来是3,3
展开全部
你的Java程序在target==nums[i]+nums[j]时只是从里面的while-j循环退出来了,没有从while-i循环中退出来,所以是3,3.解决办法是定义一个布尔变量flag,当target==nums[i]+nums[j]时设为true,从两层循环退出,就行了.
完整的Java程序如下,你看看吧.
import java.util.Arrays;
public class Solution {
public int[] twoSum(int[] nums,int target){
int i=0;
int j=0;
boolean flag=false;
while(i<nums.length){
j=i+1;
while(j<nums.length){
if(target==nums[i]+nums[j]){
flag=true;
break;
}
j++;
}
if(flag==true){
break;
}
i++;
}
int []a={i,j};
return a;
}
public static void main(String[] args) {
int[] nums={2,7,11,15};
int target=9;
System.out.println("Given nums="+Arrays.toString(nums)+",target="+target);
Solution s=new Solution();
int [] a=s.twoSum(nums, target);
int i=a[0];int j=a[1];
System.out.println("Because nums["+i+"]+nums["+j+"]="+nums[i]+"+"+nums[j]+"="+target);
System.out.println("return ["+i+","+j+"]");
}
}
运行结果
Given nums=[2, 7, 11, 15],target=9
Because nums[0]+nums[1]=2+7=9
return [0,1]
追问
好的,知道错在哪了,太感谢了
展开全部
楼上写的有点复杂了 给楼主一个简单的写法 参考冒泡排序思想
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int j=0;j<nums.length-1;j++)
for(int i=0;i<nums.length-1;i++){
if(nums[j]+nums[i+j+1]==target){
return new int []{j,i+j+1};
}
}
return new int[]{0,0};
}
}
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int j=0;j<nums.length-1;j++)
for(int i=0;i<nums.length-1;i++){
if(nums[j]+nums[i+j+1]==target){
return new int []{j,i+j+1};
}
}
return new int[]{0,0};
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
j=i+1去掉就好
追问
这是为什么呢?我这里想的是不用的数相加,+1可以不会让他重复相加
不同的数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询