GuoXin Li's Blog

LeetCode 1 Two Sum

字数统计: 297阅读时长: 1 min
2020/02/16 Share

Two Sum 两数之和

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 sameelement twice.

Example:

1
2
3
4
Given nums = [2, 7, 11, 15], target = 9,

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

resolution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* Note: The returned array must be malloced, assume caller calls free().
* violence method
* Language: C
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i, j;
int *result = NULL;
for(i = 0; i< numsSize -1; i++){
for(j = i + 1; j < numsSize; j++){
if(nums[i] + nums[j] == target){
result = (int *)malloc(sizeof(int)*2);
result[0] = i;
result[1] = j;
*returnSize = 2;
return result;
}
}
}
return result;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 /*
* violence method
* Language: Java
*/
class Solution{
public int[] twoSum(int[] nums, int target){
for (int i = 0; i < nums.length; i++ ){
for (int j = i + 1; j < nums.length; j++ ){
if ( nums[i] + nums[j] == target ){
return new int[] {i, j};
}
}
}
throw new IllegalArgumentException("No Solution");
}
}

Detail:

Time complexity: $O(n^2)$

​ n x n (row x column )

Space complexity: $O(1)$

Key: C malloc & calloc

image-20200216001753455

Another Good Method:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution{
public int[] twoSum(int[] nums, int target){
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++){
int complement = target - num[i];
if(map.containsKey(complement)){
return new [] {map.get(complement), i};
}
map.put(num[i], i);
}
throw new InllegalArgumentException("No Solution");
}
}
CATALOG
  1. 1. Two Sum 两数之和
    1. 1.1. Example:
    2. 1.2. resolution
    3. 1.3. Detail:
    4. 1.4. Key: C malloc & calloc
    5. 1.5. Another Good Method: