Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5035f0f

Browse files
committed
problem solution 0001
1 parent 8ac0824 commit 5035f0f

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

‎leetcode_alg_cpp/0001_Two_Sum.md‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
### 0001 两数之和
2+
3+
> **题目:**
4+
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
5+
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
6+
<br>**示例:**
7+
给定 nums = [2, 7, 11, 15], target = 9
8+
因为 nums[0] + nums[1] = 2 + 7 = 9
9+
所以返回 [0, 1]
10+
11+
#### (1)首先尝试暴力解法
12+
13+
两遍循环,时间复杂度O(n^2)。
14+
15+
```cpp
16+
class Solution {
17+
public:
18+
vector<int> twoSum(vector<int>& nums, int target) {
19+
int i, j, i1, j1;
20+
int len;
21+
vector<int> idxs;
22+
23+
len = nums.size();
24+
for (i = 0; i < len; i++){
25+
for (j = i+1; j < len; j++){
26+
if (nums[j] == target - nums[i]){
27+
i1 = i;
28+
j1 = j;
29+
i = len;
30+
break;
31+
}
32+
}
33+
}
34+
35+
idxs.push_back(i1);
36+
idxs.push_back(j1);
37+
38+
return idxs;
39+
}
40+
};
41+
```
42+
43+
提交,耗时过长。
44+
45+
| 提交结果 | 执行用时 (pctl%) | 内存消耗 (pctl%) | 语言 |
46+
|:---------|:-----------------|:-----------------|:-----|
47+
| 通过 | 180 ms (42.56%) | 11.5MB (5.02%) | cpp |
48+
49+
#### (2)查看题解,用 Hash Map 做
50+
51+
```cpp
52+
class Solution {
53+
public:
54+
vector<int> twoSum(vector<int>& nums, int target) {
55+
int i;
56+
int len;
57+
int res;
58+
std::map<int, int> mymap;
59+
std::map<int, int>::iterator it;
60+
vector<int> idxs;
61+
62+
len = nums.size();
63+
mymap[nums[0]] = 0;
64+
65+
for (i = 1; i < len; i++){
66+
res = target - nums[i];
67+
it = mymap.find(res);
68+
69+
if (it != mymap.end()){
70+
idxs.push_back(mymap[it->first]);
71+
idxs.push_back(i);
72+
mymap.clear();
73+
return idxs;
74+
}
75+
else
76+
mymap[nums[i]] = i;
77+
}
78+
79+
return idxs;
80+
}
81+
};
82+
```
83+
84+
提交,时间降到12 ms (83.35%)。
85+
86+
| 提交结果 | 执行用时 (pctl%) | 内存消耗 (pctl%) | 语言 |
87+
|:---------|:-----------------|:-----------------|:-----|
88+
| 通过 | 12 ms (83.35%) | 12.3MB (5.02%) | cpp |
89+
90+
#### (3)收获
91+
92+
Map 的概念、定义、赋值和访问方法,及其迭代器的使用。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /