LeetCode每日一题 (32)1. 两数之和

    科技2022-07-11  93

    1. 两数之和



    方法一:暴力循环

    class 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); return result; } } } return result; } };


    方法二:前后查找

    class Solution { public: // 1. 先对数组排一下序 // 2. 由于数组没有同一元素,可以【i向后,j向前 进行查找两个元素】 // 3. 然后在原数组里找到两个元素的位置 返回结果 vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; vector<int> oldnums=nums; sort(nums.begin(), nums.end()); int i=0,j=nums.size()-1,a,b; //找到两个元素 while(i<j){ if(nums[i]+nums[j]==target){ a=nums[i]; b=nums[j]; break; } if(nums[i]+nums[j]<target){ i++; } else{ j--; } } // 找到两个元素的位置 for(i=0;i<oldnums.size();i++){ if(oldnums[i]==a||oldnums[i]==b){ result.push_back(i); } } return result; } };


    方法三:哈希表

    class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hashtable; for (int i = 0; i < nums.size(); ++i) { auto it = hashtable.find(target - nums[i]); if (it != hashtable.end()) { return {it->second, i}; } hashtable[nums[i]] = i; } return {}; } };


    Processed: 0.015, SQL: 8