当前位置: 首页 > 面试题库 >

算法题:2sum,3sum

令狐泓
2023-03-14
本文向大家介绍算法题:2sum,3sum相关面试题,主要包含被问及算法题: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;
}

 

 类似资料:
  • 2Sum 描述 Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target

  • 2Sum II 描述 Based on 2Sum, the only change is that array is sorted in ascending order. Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1] Example 2: Input: nums = [2,3,4], target = 6 Output

  • 第一部分:Top K 算法详解 问题描述 百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。 必备知识 什么是哈

  • 1. 不用库函数求sqrt(xxxx). 要求c / c++ 二分  2. 大意:给你n个点以及颜色,只有两种颜色红和蓝,给你n个边(无向图), 节点的权重为该节点到根节点的红蓝两种颜色数量差,问这个树的权重和为多少?  dfs 超时  bfs 超时  层次遍历超时。 据说用并查集  但是还没想明白。  3. 大意: 给你n个人,每个人会关注mi个股票。 设计一个推荐系统,推荐规则为:如果i人和j

  • 前言 算法主要包括: 1、排序 排序一定要准备。 2、堆栈、队列、链表 队列和链表可以不准备,但是堆栈一定要准备。 一个小技巧:JS的数组本身就具备堆栈和队列的特性。比如:top、push、shift、unshift这四个api,本身就帮我们实现了堆栈和队列。 堆栈:先进后出。 3、递归 递归是一定不能偷懒的。算法比较难的时候,一般要用到递归。 4、波兰式和逆波兰式 总结: 比如阿里,如果基础题答

  • Angel是一个分布式机器学习平台,在上面运行算法,得到模型,这只是第一步,更加关键第二步,训练出来模型,要有比较好的准确率,可以对数据进行准确预测。在这个过程中,用户可能会遇到各种各样的问题,这里我们也一一总结一下 LR 模型不收敛,预测效果差 请检查正则项系数是否适合,过大的正则项参数会影响模型收敛,建议不大于 1/featureNum 检查Learn Rate是否过大 检查数据预处理是否有做