题解 | #两数之和#

两数之和

http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f

遍历numbers,定义m_map,键为之匹配的另外一个数,值为索引(从1开始)。遍历时查看另外一个数是否出现,如果能够找到并且不是自身则输出,输出时将小的先放入vector中。没有出现,则将当前的数及索引存入到m_map中。

class Solution {
public:
    /**
     * 
     * @param numbers int整型vector 
     * @param target int整型 
     * @return int整型vector
     */
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        vector<int> rst;
        map<int,int> m_map;
        for(int i=0;i<numbers.size();i++)
        {
            map<int,int>::iterator iter = m_map.find(target-numbers[i]);
            if(iter!=m_map.end())
            {
                int m = iter->second;
                int n = i+1;

                //如果是同一个数则跳过;
                if(m ==n)
                    continue;
                //如果不是同一个数则将小的索引先放入到vector中并结束查找;
                if(m > n)
                {
                    rst.push_back(n);
                    rst.push_back(m);
                }else
                {
                    rst.push_back(m);
                    rst.push_back(n);
                }
                break;
            }
            else
            {
                //如果没有找到则存储;
                m_map[numbers[i]] = i+1;
            }
        }

        return rst;
    }
};
全部评论

相关推荐

2025-12-19 19:39
青海大学 Java
点赞 评论 收藏
分享
牛客嘻嘻子:建议可以把mentor布置的任务和AI沟通一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务