Java

Java 8

테스트코드

package leetcode;

import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class PS1TwoSumTest {

    @Test
    public void twoSum() {
        Solution solution = new Solution();

        int[] nums = new int[]{2,7,11,15};
        int[] result = solution.twoSum(nums, 9);
        assertThat(result).contains(0).contains(1);

        nums = new int[]{3,2,4};
        result = solution.twoSum(nums, 6);
        assertThat(result).contains(1).contains(2);

        nums = new int[]{3,3};
        result = solution.twoSum(nums, 6);
        assertThat(result).contains(0).contains(1);

        nums = new int[]{2,5,5,11};
        result = solution.twoSum(nums, 10);
        assertThat(result).contains(1).contains(2);
    }
}

단순 풀이

  • ArrayList 로 바꾼다음 하나하나 찾는다.

  • 77 ms, 6.67%

  • 별로 효과적인 방법이 아니다.

  • 복잡도 O(n^2)

    ```java

    package leetcode;

import java.util.ArrayList; import java.util.List;

class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2];

    List<Integer> listNums = new ArrayList<>();

    for (int num : nums) {
        listNums.add(num);
    }

    int length = listNums.size();
    for (int i=0; i<listNums.size(); i++) {
        Integer num = listNums.get(i);
        List<Integer> subList = listNums.subList(i + 1, length);

        int index = subList.indexOf(target - num);
        if (index != -1) {
            result[0] = i;
            result[1] = index + i + 1;
        }
    }

    return result;
}

}

public class PS1TwoSum { public static void main(String[] args) { Solution solution = new Solution();

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

    nums = new int[]{3,2,4};
    result = solution.twoSum(nums, 6);
    System.out.println(result[0]);
    System.out.println(result[1]);
    System.out.println();
}

}

### HashMap 이용
* HashMap 에 넣은 다음 찾는다.
* 찾은 index 가 기준 index 와 달라야 한다.
* 4 ms, 93.67%
```java
package leetcode;

import java.util.*;

class Solution {
    /**
     * hashmap 으로 개선
     * @param nums
     * @param target
     * @return
     */
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];

        Map<Integer, Integer> mapNums = new HashMap<>();

        int length = nums.length;
        for (int i = 0; i < length; i++) {
            mapNums.put(nums[i], i);
        }

        for (int i = 0; i < length; i++) {
            int findNum = target - nums[i];
            Integer foundIndex = mapNums.get(findNum);
            if (foundIndex != null && foundIndex != i) {
                result[0] = i;
                result[1] = foundIndex;
                return result;
            }
        }

        return result;
    }
}

Last updated

Was this helpful?