LeetCode第一题:两数之和-C++

LeetCode第一题:两数之和-C++自己的解答(简单的遍历所有可能的组合,找到最终的结果):【不是特别熟悉C++,先有一个vector的插入:vector.puch_back(),主要是各种运用的不熟练,希望能有改进】给出简单代码:classSolution{public:vector<int>twoSum(vector<int>&nums,inttarget){…

大家好,又见面了,我是你们的朋友全栈君。

LeetCode第一题:两数之和-C++
自己的解答(简单的遍历所有可能的组合,找到最终的结果):

【不是特别熟悉C++,先有一个vector的插入:vector.puch_back(),主要是各种运用的不熟练,希望能有改进】
给出简单代码:
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> twoSum;
        for(int i=0;i<nums.size();i++){
            for(int j=i+1;j<nums.size();j++){
                if((nums[i]+nums[j])==target){
                    twoSum.push_back(i);
                    twoSum.push_back(j);
                }
            }
        }
    return twoSum;
    }
};

复杂度分析:

-时间复杂度:
O(n2), 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费
O(n)O(n)O(n)的时间。因此时间复杂度为
O(n2)。
-空间复杂度:
O(1)。

二、官方优化:
//C++ hash_map 用法示例:
#include <map>
#include <string>
using namespace std;

map<string, string> namemap;
//增加。。。
namemap["岳不群"]="华山派掌门人,人称君子剑";
namemap["张三丰"]="武当掌门人,太极拳创始人";
namemap["东方不败"]="第一高手,葵花宝典";

//查找。。
if(namemap.find("岳不群") !=namemap.end()){ ...}

–哈希表:

//哈希表

vector<int> twoSum(vector<int>& nums, int target) {
      vector<int> twoSum;
      map<int, int> tmpmap;//键值为nums的值,变量值为nums下标
        for (int i = 0; i < nums.size(); i++) {
          tmpmap[nums[i]] = i;
      }
      for (int i = 0; i < nums.size(); i++) {
          if (tmpmap.count(target - nums[i]) != 0 && tmpmap[target-nums[i]]!=i) {//  如果目标值减去循环到的值对应的下标不为0,或者不为i,【存在有另一个数与循环值相加等于target,则返回结果】
            twoSum.push_back(i);
              twoSum.push_back(tmpmap[target - nums[i]]);
              break;
          }
      }
      return twoSum;
  }  

–哈希表优化版:

vector<int> twoSum(vector<int>& nums, int target) {  
    vector<int> twoSum;  
    map<int, int> tmpmap;//键值为nums的值,变量值为nums下标  
  
    for (int i = 0; i < nums.size(); ++i) {  
        if (tmpmap.count(nums[i]) != 0) {  
            twoSum.push_back(tmpmap[nums[i]]);  
            twoSum.push_back(i);  
            break;  
        }  
        tmpmap[target - nums[i]] = i;  
    }  
    return twoSum;  
}  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136472.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 你还不知道Java异或运算符的妙用?

    你还不知道Java异或运算符的妙用?异或(XOR)运算符当两个boolean类型的变量,locked^deleted,如果locked与deleted是不同的,返回true。如果两个操作数是相同的,则返回false。因此,当我们需要同时检查两个不成立的条件时,可以使用异或运算符号。假设我们有两个条件,A和B,下面显示了A^B的可能值:A^B操作等于(A&&!B)||(!A&&B)。在Java中使用接下来让我看一下Java中的异或操作,当然我们可以.

    2022年9月1日
    0
  • ideal 2021.2 永久激活(已测有效)

    ideal 2021.2 永久激活(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    385
  • 基因的可变剪切_如何确认发现了可变剪切

    基因的可变剪切_如何确认发现了可变剪切什么是基因的可变剪切?有些基因的前体mRNA(pre-mRNA)通过不同的剪接方式(选择不同的剪接位点)产生不同的mRNA剪接异构体,这一过程称为可变剪接(或者选择性剪切)(AlternativeS

    2022年8月5日
    3
  • pychram安装教程

    pychram安装教程前言Pycharm社区版其实基本也够用的,但是,但是,还是想装专业版呢。一、安装pycharm1.下载安装包先去官网下载好安装包,我们这里用Windown环境的普通版就够用了https://www.jetbrains.com/pycharm/download/#section=windows2.安装后面就是一路next,跟装个QQ一样安装完成后,选择稍后重启电脑,然后去桌面打开pycharm…

    2022年8月27日
    2
  • spring注解解析流程_深入理解Kafka

    spring注解解析流程_深入理解Kafka前言众所周知,spring从2.5版本以后开始支持使用注解代替繁琐的xml配置,到了springboot更是全面拥抱了注解式配置。平时在使用的时候,点开一些常见的等注解,会发现往往在一

    2022年8月16日
    3
  • navicat注册码最新_navicat激活工具

    navicat注册码最新_navicat激活工具navicat10.1.7版本,亲测可用。名:NAVN-LNXG-XHHX-5NOO组织:NAVN-LNXG-XHHX-5NOO注册码:NAVN-LNXG-XHHX-5NOO

    2022年10月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号