zoukankan      html  css  js  c++  java
  • [LeetCode_1] twoSum

    LeetCode: 1. twoSum

    cpp

    题目描述

    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.
    Example:

    Given nums = [2, 7, 11, 15], target = 9,
    
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].
    

    中文:

    说的就是给出一个整形数组nums,和一个整数target;返回两个数字的角标,这两个角标对应在数组中的数字加起来等于target。
    你可以假设每种输入只有一个正确答案。

    思路

    暴力穷举的话就是使用2重循环,对每两个数字进行求和,然后当和为target的时候,返回这两个数。这种方法的时间复杂度也是显而易见的,为O(N^2),这种方法的时间损耗过大,不能接受。

    另外一个思路就是利用哈希表,使用一个哈希表,然后对数组进行一重循环就可以了:对数组中的每个数计算c = target - nums[i],再查看c是否存在于哈希表中,如果存在则返回这两个数对应的角标;不存在则把当前数组中的这个数添加进哈希表中,然后继续循环。

    代码

    由于这个是在LeetCode刷的第一道题,最开始对LeetCode的代码提交方法不太熟悉;和POJ不一样,LeetCode不使用标准输入/输出作为评判依据,写一个类中的方法(名字已给出),然后进行判断。

    class Solution{
    public:
      vector <int> twoSum(vector <int> &numbers, int target)
      {
        vector <int>  v;
        map <int ,int > m;
        for (int i = 0; i < numbers.size(); ++i){
          if (m.find(target - numbers[i]) != m.end()){
    	    v.push_back(m[target - numbers[i]]);
    	    v.push_back(i);
    	    return v;
          }
          // add into the map
          m[numbers[i]] = i;
        }// end of for
        return v;
      }
    };
    

    方法返回一个int类型的vector,输入是一个vector numbers和一个整数。

    这里面使用的是map,配合map的角标功能实现的哈希表,这个哈希表中的键和值是一样的。

  • 相关阅读:
    使用opencv显示视频的方法
    使用visual studio 2012 编译opencv2.4.9
    求前100个斐波那契数
    EXTJs前后台交互 常用哦3种方式
    spring 注解
    程序 人生
    ajaxs
    LNMP源码安装脚本
    系统状态统计和查看
    Shell中的${}、##和%%使用范例
  • 原文地址:https://www.cnblogs.com/guoyunzhe/p/5843268.html
Copyright © 2011-2022 走看看