zoukankan      html  css  js  c++  java
  • 【LeetCode】1. Two Sum

    题目:

    Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution.

    从给定的一个整数数组中找出两个数,使得它们的和为target,并返回两个数在原数组中的下标

    思路:

    1. 对数组进行排序,为了方便获取排序后的原下标,采用multimap(map不允许重复的keys值)

        multimap不能用 [key] = value的方式来行赋值,但是map可以

    2. 用两个游标(i = 0, j = size - 1)分别从数组的两头开始,如果

       1) nums[i] + nums[j] > target      大于目标值,则将j往前移一位

       2) nums[i] + nums[j] < target      小于目标值,则将i往后移一位

       3) nums[i] + nums[j] = target      完成~ 

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int>& nums, int target) {
     4         int nsize = nums.size();
     5         multimap<int, int> _n_i;
     6         for(int i = 0; i < nsize; i++)
     7             _n_i.insert(pair<int,int>(nums[i], i));
     8             
     9         vector<int> result;
    10         multimap<int, int>::iterator _it_begin = _n_i.begin();
    11         multimap<int, int>::iterator _it_end = _n_i.end();
    12         --_it_end;
    13         while(true){
    14             int tmp = _it_begin->first + _it_end->first;
    15             if(tmp < target)
    16                 ++_it_begin;
    17             else if(tmp > target)
    18                 --_it_end;
    19             else{
    20                 int i = _it_begin->second;
    21                 int j = _it_end->second;
    22                 if(i > j){
    23                     int _tmp = i;
    24                     i = j;
    25                     j = _tmp;
    26                 }
    27                 result.push_back(i);
    28                 result.push_back(j);
    29                 return result;
    30             }
    31         }
    32     }
    33 };
  • 相关阅读:
    欢迎使用CSDN-markdown编辑器
    欢迎使用CSDN-markdown编辑器
    Math类简介
    Math类简介
    http_server
    tcp服务器
    swoole安装
    laravel源码解析
    VMware的Unity模式
    string.format() %d越界的问题
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/5326903.html
Copyright © 2011-2022 走看看