LeetCode 1-Two Sum

来源:互联网 发布:朋友圈转发软件免费版 编辑:程序博客网 时间:2024/05/04 15:45

题目:给一个数组a[n]以及一个给定值target,返回数组中的两个数的位置,使其之和等于给定值

思路:1、暴力法搜索,两个for循环依次选取两个值进行判断,匹配则停止并输出。for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){panduan'...}};时间复杂度O(n2)不过这种方法会超时。

   2、以空间换时间,用一个map,key为数组的值,value为值的位置,一次循环遍历,如果target-a[i]不在map中,则将当前值放入map,否则可以直接输出,时间负责度:O(N),空间复杂度:O(N)


class Solution {public:        //时间复杂度:O(n),单次遍历        //空间复杂度:O(n),nmap随输入数组大小变化        //思路:;利用一个map,map中存的值为<当前值,在数组中位置>,遍历数组,(1)如果target-当前值未在map中,则将当前值放入map中        //(2)如果当前值已经在map中,则跳过(在(1)不成立情况下,如果(1)成立则输出两个相同值的位置)    vector<int> twoSum(vector<int> &numbers, int target) {        int i,j;         vector<int> results;         map<int,int> nmap;          for(i=0;i<=numbers.size()-1;i++){                                if(!nmap.count(numbers[i])){                    if(nmap.count(target-numbers[i])){                       results.push_back(nmap[target-numbers[i]]+1);                    results.push_back(i+1);                    break;                     }                    else{                        nmap.insert(pair<int, int>(numbers[i], i));                     }                }                else if(nmap[numbers[i]]<i&&(numbers[i]*2==target)){                                         results.push_back(nmap[target-numbers[i]]+1);                    results.push_back(i+1);                    break;                }                                                                                  }                                          return results;            }         };




0 0
原创粉丝点击