leetcode第1题,两数之和问题

大四才开始看算法,是不是已经晚了?算法渣渣的开始

题目是这样的:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

我的代码是这样的:

 public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int sum[]=new int[2];
        for(int i=0;i<nums.length;i++){
            for(int j=1;j<nums.length;j++){
               if(nums[j]+nums[i]==target){
                   sum[0]=j;
                 sum[1]=i;
               } 
            }

        }
      return sum;


    }
}

系统说通过了一半的测试,例如[3,3]6输入就会出错
不是很明白,感觉我的答案和其他的也差不多

第二个循环应该是j=i+1吧,要不然会出现[2,3]已经是正确答案了,你的却是[3,2]

因为i=0的时候就已经找到结果了,但是循环没结束;
i=1,又进行了一次循环,这一次没必要,但是改变了之前正确的结果!
修改:找到结果之后跳出外层循环,
outer:for(int i=0;i<nums.length;i++){
for(int j=1;j<nums.length;j++){
if(nums[j]+nums[i]==target){
sum[0]=j;
sum[1]=i;
break outer;
}
}

    }

或者直接在
if(nums[j]+nums[i]==target){
sum[0]=j;
sum[1]=i;
i = nums.length;
}

you may not use the same element twice说了不要重复

package com.ljheee.other;

public class Solution {

public int[] twoSum(int[] nums, int target) {
    int sum[]=new int[2];

    for(int i = 0 ; i<nums.length ; i++){
        int temp  = target - nums[i];
        if(isExist(nums , temp)){
            sum[0] = nums[i];
            sum[1] = temp;
        }
    }
  return sum;
}


public boolean isExist(int[] nums, int key){
    boolean result = false;

    for (int i = 0; i < nums.length; i++) {
        if(key == nums[i]){
            result = true;
            break;
        }
    }
    return result;
}

public static void main(String[] args) {

    Solution solution = new Solution();
    int[] two = solution.twoSum(new int[]{2, 7, 11, 15}, 9);
    System.out.println(two[0]);
    System.out.println(two[1]);
}

}