(算法分析Week2)Two Sum[Easy]

来源:互联网 发布:linux关机重启命令 编辑:程序博客网 时间:2024/06/15 19:07

1. Two Sum[Easy]

Description

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 same element twice.
Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
给出一个整数数组和一个目标值,找到数组中和为该目标值的两个数,返回它们在数组中的位置

Solution

方法一:最容易想到的办法就是两重循环遍历数组,找到目标值即返回。复杂度为O(n²)

方法二:利用map{key : value}key不重复的特性,存储target-arr[i](即第i个位置对应的值),value即i。再利用map的find函数,如果返回值不为空,则说明找到对应的两个数,返回value即可。遍历一次复杂度O(n)

Complexity analysis

略。

Code

Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {        vector<int> result;        for (int i = 0; i < nums.size(); i++) {            for (int j = i+1; j < nums.size(); j++) {                if (nums[i] + nums[j] == target) {                    result.push_back(i);                    result.push_back(j);                    break;                }            }        }        return result;    }};

Result

这里写图片描述


说点别的

如果不是要求返回对应位置,可以先排序,然后用两个“指针”,一个从前向后一个从后向前,两者之和大于target就往前,否则往后。写个伪代码:

left = 0;right = size - 1;while(left < right) {if (arr[left] + arr[right] == target))return left,right;else if ( < target) {left++;}esle if ( > target) {right--;}}
原创粉丝点击