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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab是fmincon,matlab中fmincon

    matlab是fmincon,matlab中fmincon标签:fmincon|MATLAB非线性优化fmincon_数学_自然科学_专业资料。MATLAB非线性优化函数fmincon的详细整理active-setandsqpalgorithms不接受用户提供的海塞矩阵……精品Matlab优化函数fmincon1.fmincon是一种局部优化…很多人只知道用matlab中的fmincon函数,却不清楚它的真正意思,…

    2022年4月29日
    79
  • python爬虫常用库

    python爬虫常用库python爬虫常用库请求库:1.requests这个库是爬虫最常用的一个库2.SeleniumSelenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下

    2022年7月3日
    21
  • 增强版在线LEFSe分析和可视化鉴定标志性基因或物种

    增强版在线LEFSe分析和可视化鉴定标志性基因或物种LEfSe分析即LDAEffectSize分析,是一种用于发现和解释高维度数据生物标识(基因、通路和分类单元等)的分析工具,可以进行两个或多个分组的比较,它强调统计意义和生物相关性,…

    2022年6月10日
    50
  • TDD与FDD

    TDD与FDDFDD和TDD主要区别就在于采用不同的双工方式,为频分双工(FDD)和时分双工(TDD)是两种不同的双工方式。FDD是在分离的两个对称频率信道上进行接收和发送,用保护频段来分离接收和发送信道。FDD的缺点就是必须采用成对的频率,依靠频率来区分上下行链路,其单方向的资源在时间上是连续的。FDD虽然在支持对称业务时,能充分利用上下行的频谱,但在支持非对称业务时,频谱利用率将大大降低。  …

    2022年6月13日
    38
  • Linux下的双网卡绑定bond0 em1 em2

    一、什么是bonding Linuxbonding驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余 二、bonding应用方向1、网络负载均衡 对于bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡,当做一块来用,解决一个IP地址,流量过大,服务器网络压力过大的问题。对于文件服务器来说,比如NFS或SAMBA文件服

    2022年4月8日
    105
  • java解析url的链接和参数_java根据url下载图片

    java解析url的链接和参数_java根据url下载图片方法一Blob和FileReader对象实现原理:使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType=“blob”],使用FileReader对象接收blob。getBase64(“https://fastmarket.oss-cn-shenzhen.aliyuncs.com/oss/static/other/1/images/baseMap_index.jpg”)//链接是你的网络图片functiongetBase64(imgUrl){

    2025年11月28日
    2

发表回复

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

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