这个twosum的java题目我哪里错了?我的程序运行出来是3,3

 我来答
紫薇参星
科技发烧友

2016-10-27 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5984
采纳率:92%
帮助的人:3551万
展开全部

你的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]

追问
好的,知道错在哪了,太感谢了
FrontSearch
2017-09-01
知道答主
回答量:18
采纳率:0%
帮助的人:4.2万
展开全部
楼上写的有点复杂了 给楼主一个简单的写法 参考冒泡排序思想
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};
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友07353a3
2016-10-27 · 超过30用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:44.4万
展开全部
j=i+1去掉就好
追问
这是为什么呢?我这里想的是不用的数相加,+1可以不会让他重复相加
不同的数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式