栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

算法题:2sum,3sum

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法题:2sum,3sum

参考回答:

2sum:

vector<int> twoSum(vector<int>& nums, int target) {    unordered_map<int,vector<int>> mark;    for(int i=0;i<nums.size();i++)        mark[nums[i]].push_back(i);        for(int i = 0;i<nums.size();i++){ if(target-nums[i] == nums[i]){ if(mark[nums[i]].size() > 1){ vector<int> tmp{i,mark[nums[i]][1]}; return tmp; } }else{ if(mark.find(target-nums[i]) != mark.end()){ vector<int> tmp{i,mark[target-nums[i]][0]}; return tmp; }        }    }}

3sum:

void two_sum(vector<int>& nums,int i,int target,vector<vector<int>> &result){    int j = nums.size()-1;    int b = i-1;    while(i<j){        if(nums[i]+nums[j] == target){ result.push_back(vector<int>{nums[b],nums[i],nums[j]}); i++; j--; while(i<j && nums[i] == nums[i-1]) i++; while(i<j && nums[j+1] == nums[j]) j--;        }else{ if(nums[i]+nums[j] < target)     i++; else   j--;        }    }    return;}vector<vector<int>> threeSum(vector<int>& nums) {    set<vector<int>> result;    vector<vector<int>> result2;    sort(nums.begin(),nums.end());    for(int i=0;i<nums.size();i++)    if(i>0&&nums[i-1]== nums[i])    continue;    else    two_sum(nums,i+1,-nums[i],result2);    return result2;}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366560.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号