zoukankan      html  css  js  c++  java
  • 【leetcode】 算法题1 两数之和

     
    问题
      
      
     给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
     
    代码实现
      
    #include <vector>
    #include <map>
    /**
    *
    *给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
    *你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
    *case:
    *给定 nums = [2, 7, 11, 15], target = 9
    *因为 nums[0] + nums[1] = 2 + 7 = 9
    *所以返回 [0, 1]
    */
    using namespace std;
    class Solution {
    public:
        // 两两对比的方式,时间复杂度为O(n2)
        vector<int> twoSum(vector<int>& nums, int target) {
            vector<int> ret;
    
            // 第一种
            /*for (int i = 0; i < nums.size(); i++) {
                for (int j = i + 1; j < nums.size(); j++) {
                    if (nums[i] + nums[j] == target) {
                        ret.push_back(i);
                        ret.push_back(j);
                        return ret;
                    }
                }
            }*/
    
            // 第二种:数据插入到hashmap里,然后通过target - nums[i]来确定,时间复杂度为O(2n)
            map<int, int> m;
            for (int i = 0; i < nums.size(); i++) {
                m[nums[i]]  = i;
            }
            for (int i = 0; i < nums.size(); i++) {
                if (m.count(target - nums[i]) > 0 && i != m[target - nums[i]]) {
                    ret.push_back(i);
                    ret.push_back(m[target - nums[i]]);
                    return ret;
                }
            }
            return ret;
        }
    };
    

      

     

     
     
    推荐
     
     
     
     
     
     
  • 相关阅读:
    Servlet的生命周期?
    C++图结构的图结构操作示例
    如何从google play下载app应用,直接下载apk
    C# Socket异步聊天例子
    三极管饱和,放大,截止电压判断
    java中的浮点(float)运算
    微软2014校园招聘笔试试题
    软件开发中的资源控制问题学习
    linux mount命令学习
    17、Spring Boot普通类调用bean【从零开始学Spring Boot】
  • 原文地址:https://www.cnblogs.com/baochuan/p/9019465.html
Copyright © 2011-2022 走看看