From abfeb4339aec312fd9e165ca141bdc97d20bbd11 Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 15:59:32 +0800 Subject: [PATCH 1/9] Create miss-ann --- miss-ann | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 miss-ann diff --git a/miss-ann b/miss-ann new file mode 100644 index 0000000..59d0088 --- /dev/null +++ b/miss-ann @@ -0,0 +1,161 @@ +Leetcode+两数之和 小安晋升分享(第一题哦) + +# 两数之和 + +今天是小安开始Leetcode刷题的第一天,一定要加油o.废话不多,进入正文啦…@-@ + +## 题目描述 +给定一个整数数组 *nums* 和一个目标值*target*,请你在该数组中找出和为目标值的两个**整数**。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。[题目原址](https://leetcode-cn.com/problems/two-sum/solution/) +**示例** + +> 给定 nums = [2, 7, 11, 15],target = 9 +> 因为 nums[0] +nums[1] =2+7 =9 +> 所以返回 [0,1] + +## 方法一:暴力解法 + +### 思想 +暴力法很简单。遍历每个元素 xx,并查找是否存在一个值与 target - xtarget−x 相等的目标元素。 + +### 代码实现 +【C实现】 + +``` +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* twoSum(int* nums, int numsSize, int target) { + static int a[2]={0,0}; + for (int i=0;i map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.put(nums[i], i);//将每个元素的值和他的索引添加到表中 + } + for (int i = 0; i < nums.length; i++) { + int tmp = target - nums[i]; + if (map.containsKey(tmp) && map.get(tmp) != i) { + return new int[] { i, map.get(tmp) }; + } + } + throw new IllegalArgumentException("No two sum solution");//异常抛出 + } +} +``` + + +### 复杂度分析 + + - 时间复杂度:$O(n)$, 我们把包含有 $n$个元素的列表遍历两次。由于哈希表将查找时间缩短到 $O(1)$,所以时间复杂度为 $O(n)$。 + - 空间复杂度:$O(n)$, 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了$n$ 个元素。 +## 方法三:一遍哈希表 +### 思想 +事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。 +### 代码实现 +【Java实现】 + +``` +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int tmp = target - nums[i]; + if (map.containsKey(tmp)) { + return new int[] { map.get(tmp), i }; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} +``` +【python实现】 + +``` +class Solution: + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + if not nums: + return None + d ={} + for i,item in enumerate(nums): + tmp = target - item + for key,value in d.items(): + if value == tmp: + return [i,key] + + d[i] = item + return None + +``` +### 复杂度分析 + + - 时间复杂度:$O(n)$, 我们只遍历了包含有$n$个元素的列表一次。在表中进行的每次查找只花费 $O(1)$的时间。 + - 空间复杂度:$O(n)$, 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存$n$个元素。 + + +# Thanks +一起加油哦~~ From 538b7d8f560a433761a779c965ad74ab8797f222 Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:24:38 +0800 Subject: [PATCH 2/9] Delete miss-ann --- miss-ann | 161 ------------------------------------------------------- 1 file changed, 161 deletions(-) delete mode 100644 miss-ann diff --git a/miss-ann b/miss-ann deleted file mode 100644 index 59d0088..0000000 --- a/miss-ann +++ /dev/null @@ -1,161 +0,0 @@ -Leetcode+两数之和 小安晋升分享(第一题哦) - -# 两数之和 - -今天是小安开始Leetcode刷题的第一天,一定要加油o.废话不多,进入正文啦…@-@ - -## 题目描述 -给定一个整数数组 *nums* 和一个目标值*target*,请你在该数组中找出和为目标值的两个**整数**。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。[题目原址](https://leetcode-cn.com/problems/two-sum/solution/) -**示例** - -> 给定 nums = [2, 7, 11, 15],target = 9 -> 因为 nums[0] +nums[1] =2+7 =9 -> 所以返回 [0,1] - -## 方法一:暴力解法 - -### 思想 -暴力法很简单。遍历每个元素 xx,并查找是否存在一个值与 target - xtarget−x 相等的目标元素。 - -### 代码实现 -【C实现】 - -``` -/** - * Note: The returned array must be malloced, assume caller calls free(). - */ -int* twoSum(int* nums, int numsSize, int target) { - static int a[2]={0,0}; - for (int i=0;i map = new HashMap<>(); - for (int i = 0; i < nums.length; i++) { - map.put(nums[i], i);//将每个元素的值和他的索引添加到表中 - } - for (int i = 0; i < nums.length; i++) { - int tmp = target - nums[i]; - if (map.containsKey(tmp) && map.get(tmp) != i) { - return new int[] { i, map.get(tmp) }; - } - } - throw new IllegalArgumentException("No two sum solution");//异常抛出 - } -} -``` - - -### 复杂度分析 - - - 时间复杂度:$O(n)$, 我们把包含有 $n$个元素的列表遍历两次。由于哈希表将查找时间缩短到 $O(1)$,所以时间复杂度为 $O(n)$。 - - 空间复杂度:$O(n)$, 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了$n$ 个元素。 -## 方法三:一遍哈希表 -### 思想 -事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。 -### 代码实现 -【Java实现】 - -``` -class Solution { - public int[] twoSum(int[] nums, int target) { - Map map = new HashMap<>(); - for (int i = 0; i < nums.length; i++) { - int tmp = target - nums[i]; - if (map.containsKey(tmp)) { - return new int[] { map.get(tmp), i }; - } - map.put(nums[i], i); - } - throw new IllegalArgumentException("No two sum solution"); - } -} -``` -【python实现】 - -``` -class Solution: - def twoSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - if not nums: - return None - d ={} - for i,item in enumerate(nums): - tmp = target - item - for key,value in d.items(): - if value == tmp: - return [i,key] - - d[i] = item - return None - -``` -### 复杂度分析 - - - 时间复杂度:$O(n)$, 我们只遍历了包含有$n$个元素的列表一次。在表中进行的每次查找只花费 $O(1)$的时间。 - - 空间复杂度:$O(n)$, 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存$n$个元素。 - - -# Thanks -一起加油哦~~ From 7a812e00b01032799709ca7c434a5d56b25ba07f Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:28:09 +0800 Subject: [PATCH 3/9] Create al1.c --- miss-ann/two_sum/al1/al1.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 miss-ann/two_sum/al1/al1.c diff --git a/miss-ann/two_sum/al1/al1.c b/miss-ann/two_sum/al1/al1.c new file mode 100644 index 0000000..c5a8cbd --- /dev/null +++ b/miss-ann/two_sum/al1/al1.c @@ -0,0 +1,17 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* twoSum(int* nums, int numsSize, int target) { + static int a[2]={0,0}; + for (int i=0;i Date: Wed, 5 Dec 2018 16:34:34 +0800 Subject: [PATCH 4/9] Create al1.java --- miss-ann/two_sum/al1/al1.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 miss-ann/two_sum/al1/al1.java diff --git a/miss-ann/two_sum/al1/al1.java b/miss-ann/two_sum/al1/al1.java new file mode 100644 index 0000000..edf98a8 --- /dev/null +++ b/miss-ann/two_sum/al1/al1.java @@ -0,0 +1,12 @@ +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[j] == target - nums[i]) { + return new int[] { i, j }; + } + } + } + throw new IllegalArgumentException("No two sum solution"); + } +} From 8838425beb53fb55a49b3ee485f769cc103b71b6 Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:36:24 +0800 Subject: [PATCH 5/9] Create al1.py --- miss-ann/two_sum/al1/al1.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 miss-ann/two_sum/al1/al1.py diff --git a/miss-ann/two_sum/al1/al1.py b/miss-ann/two_sum/al1/al1.py new file mode 100644 index 0000000..de5b2d3 --- /dev/null +++ b/miss-ann/two_sum/al1/al1.py @@ -0,0 +1,12 @@ +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + for i in range(len(nums)-1): + for j in range(len(nums) -i -1): + if nums[i]+nums[i+j+1]==target: + return [i,i+j+1] + return [] From 1f3b917c97969119579304c48175d771811cf48e Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:37:18 +0800 Subject: [PATCH 6/9] Create readme.md --- miss-ann/two_sum/readme.md | 161 +++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 miss-ann/two_sum/readme.md diff --git a/miss-ann/two_sum/readme.md b/miss-ann/two_sum/readme.md new file mode 100644 index 0000000..364b2b7 --- /dev/null +++ b/miss-ann/two_sum/readme.md @@ -0,0 +1,161 @@ +Leetcode 小安晋升分享(第一题哦) + +# 两数之和 + +今天是小安开始Leetcode刷题的第一天,一定要加油o.废话不多,进入正文啦…@-@ + +## 题目描述 +给定一个整数数组 *nums* 和一个目标值*target*,请你在该数组中找出和为目标值的两个**整数**。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。[题目原址](https://leetcode-cn.com/problems/two-sum/solution/) +**示例** + +> 给定 nums = [2, 7, 11, 15],target = 9 +> 因为 nums[0] +nums[1] =2+7 =9 +> 所以返回 [0,1] + +## 方法一:暴力解法 + +### 思想 +暴力法很简单。遍历每个元素 xx,并查找是否存在一个值与 target - xtarget−x 相等的目标元素。 + +### 代码实现 +【C实现】 + +``` +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* twoSum(int* nums, int numsSize, int target) { + static int a[2]={0,0}; + for (int i=0;i map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.put(nums[i], i);//将每个元素的值和他的索引添加到表中 + } + for (int i = 0; i < nums.length; i++) { + int tmp = target - nums[i]; + if (map.containsKey(tmp) && map.get(tmp) != i) { + return new int[] { i, map.get(tmp) }; + } + } + throw new IllegalArgumentException("No two sum solution");//异常抛出 + } +} +``` + + +### 复杂度分析 + + - 时间复杂度:$O(n)$, 我们把包含有 $n$个元素的列表遍历两次。由于哈希表将查找时间缩短到 $O(1)$,所以时间复杂度为 $O(n)$。 + - 空间复杂度:$O(n)$, 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了$n$ 个元素。 +## 方法三:一遍哈希表 +### 思想 +事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。 +### 代码实现 +【Java实现】 + +``` +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int tmp = target - nums[i]; + if (map.containsKey(tmp)) { + return new int[] { map.get(tmp), i }; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} +``` +【python实现】 + +``` +class Solution: + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + if not nums: + return None + d ={} + for i,item in enumerate(nums): + tmp = target - item + for key,value in d.items(): + if value == tmp: + return [i,key] + + d[i] = item + return None + +``` +### 复杂度分析 + + - 时间复杂度:$O(n)$, 我们只遍历了包含有$n$个元素的列表一次。在表中进行的每次查找只花费 $O(1)$的时间。 + - 空间复杂度:$O(n)$, 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存$n$个元素。 + + +# Thanks +一起加油哦~~ From 73563e1b3377d5545c2de1140d7be64f6f4161db Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:38:30 +0800 Subject: [PATCH 7/9] Create al2.java --- miss-ann/two_sum/al2/al2.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 miss-ann/two_sum/al2/al2.java diff --git a/miss-ann/two_sum/al2/al2.java b/miss-ann/two_sum/al2/al2.java new file mode 100644 index 0000000..2058295 --- /dev/null +++ b/miss-ann/two_sum/al2/al2.java @@ -0,0 +1,15 @@ +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.put(nums[i], i);//将每个元素的值和他的索引添加到表中 + } + for (int i = 0; i < nums.length; i++) { + int tmp = target - nums[i]; + if (map.containsKey(tmp) && map.get(tmp) != i) { + return new int[] { i, map.get(tmp) }; + } + } + throw new IllegalArgumentException("No two sum solution");//异常抛出 + } +} From 33d6be58b402b98b74acb8d6878fcb801dc87749 Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:39:19 +0800 Subject: [PATCH 8/9] Create al3.java --- miss-ann/two_sum/al3/al3.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 miss-ann/two_sum/al3/al3.java diff --git a/miss-ann/two_sum/al3/al3.java b/miss-ann/two_sum/al3/al3.java new file mode 100644 index 0000000..bf369ea --- /dev/null +++ b/miss-ann/two_sum/al3/al3.java @@ -0,0 +1,13 @@ +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int tmp = target - nums[i]; + if (map.containsKey(tmp)) { + return new int[] { map.get(tmp), i }; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} From e755460d8b88081ef85e67f3246bb9d9618a3759 Mon Sep 17 00:00:00 2001 From: missannas <42210208+missannas@users.noreply.github.com> Date: Wed, 5 Dec 2018 16:39:56 +0800 Subject: [PATCH 9/9] Create al3.py --- miss-ann/two_sum/al3/al3.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 miss-ann/two_sum/al3/al3.py diff --git a/miss-ann/two_sum/al3/al3.py b/miss-ann/two_sum/al3/al3.py new file mode 100644 index 0000000..62f0174 --- /dev/null +++ b/miss-ann/two_sum/al3/al3.py @@ -0,0 +1,18 @@ +class Solution: + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + if not nums: + return None + d ={} + for i,item in enumerate(nums): + tmp = target - item + for key,value in d.items(): + if value == tmp: + return [i,key] + + d[i] = item + return None