区块链技术博客
www.b2bchain.cn

LeetCode 0001.TwoSum求职学习资料

本文介绍了LeetCode 0001.TwoSum求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

1. 描述

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

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

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6 Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6 Output: [0,1]

Constraints:

  • 2 <= nums.length <= 103
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

2. 分析及实现

假设有一个数组 a=[2, 7, 11, 15],寻找和为 26 的两个元素的下标。

LeetCode 0001.TwoSum

1. 暴力法

暴力法是最容易想到的解决方法,使用两个for循环分别取值相加,计算和是否为 26。此种方案的时间复杂度为 O(n2)

LeetCode 0001.TwoSum

假设数组的 size 为 n,那么 最外层 i 的取值范围为 [0,n-1),内层 j 的取值范围为 [i+1, n-1]。

代码如下:

vector<int> twoSum(vector<int>& nums, int target) {     size_t size_of_nums = nums.size();      int i = 0, j = 0;     for (; i < size_of_nums - 1; i++)     {         for (j = i + 1; j < size_of_nums; j++)         {             if (nums[i] + nums[j] == target)             {                 return {i, j};             }         }     }      return {}; }

2. Hash 法

另一种解法是首先将数组的值都放到一个Hash Map里,数组的值作为 key 值,数组元素的下标作为 value 值;然后遍历数组去找与其对应对的另一元素是否存在 Map 中。这个解决方案的时间复杂度为 O(n)。

LeetCode 0001.TwoSum

注意:遍历数组时 i 的取值范围为 [0, n-1),因为前面的数组元素都和最后一个元素进行了匹配。

代码如下:

“`cpp
vector twoSumWithHash(vector& nums, int target) {
size_t size_of_nums = nums.size();

unordered_map<int, int> mymap; for (int i = 0; i < size_of_nums; i++) {     mymap[nums[i]] = i; }  for (int i = 0; i < size_of_nums - 1; i++) {     const int another = target - nums[i];     if (mymap.find(another) != mymap.end() && mymap[another] > i)     {         return {i, mymap[another]};

1. 描述

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

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

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6 Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6 Output: [0,1]

Constraints:

  • 2 <= nums.length <= 103
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

2. 分析及实现

假设有一个数组 a=[2, 7, 11, 15],寻找和为 26 的两个元素的下标。

LeetCode 0001.TwoSum

1. 暴力法

暴力法是最容易想到的解决方法,使用两个for循环分别取值相加,计算和是否为 26。此种方案的时间复杂度为 O(n2)

LeetCode 0001.TwoSum

假设数组的 size 为 n,那么 最外层 i 的取值范围为 [0,n-1),内层 j 的取值范围为 [i+1, n-1]。

代码如下:

vector<int> twoSum(vector<int>& nums, int target) {     size_t size_of_nums = nums.size();      int i = 0, j = 0;     for (; i < size_of_nums - 1; i++)     {         for (j = i + 1; j < size_of_nums; j++)         {             if (nums[i] + nums[j] == target)             {                 return {i, j};             }         }     }      return {}; }

2. Hash 法

另一种解法是首先将数组的值都放到一个Hash Map里,数组的值作为 key 值,数组元素的下标作为 value 值;然后遍历数组去找与其对应对的另一元素是否存在 Map 中。这个解决方案的时间复杂度为 O(n)。

LeetCode 0001.TwoSum

注意:遍历数组时 i 的取值范围为 [0, n-1),因为前面的数组元素都和最后一个元素进行了匹配。

代码如下:

“`cpp
vector twoSumWithHash(vector& nums, int target) {
size_t size_of_nums = nums.size();

unordered_map<int, int> mymap; for (int i = 0; i < size_of_nums; i++) {     mymap[nums[i]] = i; }  for (int i = 0; i < size_of_nums - 1; i++) {     const int another = target - nums[i];     if (mymap.find(another) != mymap.end() && mymap[another] > i)     {         return {i, mymap[another]};

1. 描述

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

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

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6 Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6 Output: [0,1]

Constraints:

  • 2 <= nums.length <= 103
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

2. 分析及实现

假设有一个数组 a=[2, 7, 11, 15],寻找和为 26 的两个元素的下标。

LeetCode 0001.TwoSum

1. 暴力法

暴力法是最容易想到的解决方法,使用两个for循环分别取值相加,计算和是否为 26。此种方案的时间复杂度为 O(n2)

LeetCode 0001.TwoSum

假设数组的 size 为 n,那么 最外层 i 的取值范围为 [0,n-1),内层 j 的取值范围为 [i+1, n-1]。

代码如下:

vector<int> twoSum(vector<int>& nums, int target) {     size_t size_of_nums = nums.size();      int i = 0, j = 0;     for (; i < size_of_nums - 1; i++)     {         for (j = i + 1; j < size_of_nums; j++)         {             if (nums[i] + nums[j] == target)             {                 return {i, j};             }         }     }      return {}; }

2. Hash 法

另一种解法是首先将数组的值都放到一个Hash Map里,数组的值作为 key 值,数组元素的下标作为 value 值;然后遍历数组去找与其对应对的另一元素是否存在 Map 中。这个解决方案的时间复杂度为 O(n)。

LeetCode 0001.TwoSum

注意:遍历数组时 i 的取值范围为 [0, n-1),因为前面的数组元素都和最后一个元素进行了匹配。

代码如下:

“`cpp
vector twoSumWithHash(vector& nums, int target) {
size_t size_of_nums = nums.size();

unordered_map<int, int> mymap; for (int i = 0; i < size_of_nums; i++) {     mymap[nums[i]] = i; }  for (int i = 0; i < size_of_nums - 1; i++) {     const int another = target - nums[i];     if (mymap.find(another) != mymap.end() && mymap[another] > i)     {         return {i, mymap[another]};

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » LeetCode 0001.TwoSum求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们