LeetCode每日一题Day3——1. 两数之和

news2024/11/20 6:31:40

博主:命运之光 

🦄专栏:算法修炼之练气篇(C\C++版)

🍓专栏:算法修炼之筑基篇(C\C++版)

🐳专栏:算法修炼之练气篇(Python版)

博主的其他文章:点击进入博主的主页 

前言:欢迎来到这个LeetCode每日算法题专栏!

🌊无论你是编程新手还是有一定经验的开发者,掌握算法和数据结构都是成功的关键。在这个专栏里,我将每天为你分享一道算法题,并提供简单易懂的解析和讲解。

☀️通过每日挑战,你将逐渐培养解决问题的思维方式,掌握重要的编程技巧。无论是面试准备还是日常编码,这些知识都将对你大有裨益。

🎉让我们一起开始这段充满乐趣和成长的学习之旅吧!希望你能从中受益,开拓编程的新视野!

目录

1. 两数之和

正确代码

方法一:暴力搜索

方法二:哈希表求解

错误总结

第一次提交出现的错误

执行结果

错误原因

再次提交(成功通过)

尝试对算法进行优化

优化算法后再次提交(成功通过~击败91.52%)

结语


1. 两数之和

正确代码

方法一:暴力搜索

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        
        // 方法一:暴力搜索
        for (int i = 0; i < nums.size(); i++) {
            for (int j = i + 1; j < nums.size(); j++) { // 注意这里是从i+1开始,避免重复利用同一个元素
                if (target - nums[j] == nums[i]) {
                    result.push_back(i);
                    result.push_back(j);
                    return result; // 找到符合条件的两个索引后,直接返回结果
                }
            }
        }
        
        return result; // 如果没有找到结果,则返回空的vector
    }
};

方法二:哈希表求解

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> numIndexMap; // 哈希表,用于存储元素值与对应的索引

        for (int i = 0; i < nums.size(); i++) {
            int complement = target - nums[i]; // 计算目标值与当前元素的差值

            // 查找差值在哈希表中是否存在,若存在,则找到了符合条件的两个索引
            if (numIndexMap.count(complement) > 0) {
                return {numIndexMap[complement], i};
            }

            // 将当前元素及其索引添加到哈希表中
            numIndexMap[nums[i]] = i;
        }

        return {}; // 如果没有找到结果,则返回空的vector
    }
};

错误总结

第一次提交出现的错误

执行结果

Line 13: Char 5: error: non-void function does not return a value [-Werror,-Wreturn-type] } ^ 1 error generated.

错误原因

代码有一个错误,编译器提示是“non-void function does not return a value”,意思是非void类型的函数必须返回一个值。

在你的代码中,函数twoSum声明的返回类型是vector<int>,但是在函数体内并没有明确指定返回值。这是因为在你的暴力搜索方法中,只是通过cout输出结果,而没有返回任何值。

为了修复这个错误,你应该在函数的末尾返回一个合适的vector<int>类型的值,即找到符合条件的两个索引值,并将它们放入一个vector中后返回。

以下是修复后的代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        
        // 方法一:暴力搜索
        for (int i = 0; i < nums.size(); i++) {
            for (int j = i + 1; j < nums.size(); j++) { // 注意这里是从i+1开始,避免重复利用同一个元素
                if (target - nums[j] == nums[i]) {
                    result.push_back(i);
                    result.push_back(j);
                    return result; // 找到符合条件的两个索引后,直接返回结果
                }
            }
        }
        
        return result; // 如果没有找到结果,则返回空的vector
    }
};

再次提交(成功通过)

但显然暴力搜索只能击败12.97%的对手,不是很好。

尝试对算法进行优化

暴力搜索虽然简单,但是时间复杂度较高,为O(n^2)。我们可以通过使用哈希表来优化算法,将时间复杂度降低为O(n)。下面是优化后的代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> numIndexMap; // 哈希表,用于存储元素值与对应的索引

        for (int i = 0; i < nums.size(); i++) {
            int complement = target - nums[i]; // 计算目标值与当前元素的差值

            // 查找差值在哈希表中是否存在,若存在,则找到了符合条件的两个索引
            if (numIndexMap.count(complement) > 0) {
                return {numIndexMap[complement], i};
            }

            // 将当前元素及其索引添加到哈希表中
            numIndexMap[nums[i]] = i;
        }

        return {}; // 如果没有找到结果,则返回空的vector
    }
};

优化算法后再次提交(成功通过~击败91.52%


结语

再接再厉,继续加油!


本章的内容就到这里了,觉得对你有帮助的话就支持一下博主把~

🌌点击下方个人名片,交流会更方便哦~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较

一、String与Int互转 在 Java 中要将 String 类型转化为 int 类型时&#xff0c;需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换。 String str "555555555"; int a Integer.parseInt(str); // 方式1 int b Integer.valueOf(str).intValu…

从虚拟到现实:数字孪生助力建筑创新

随着科技的不断进步&#xff0c;数字孪生技术正逐渐成为建筑行业的新宠。数字孪生是一种将实体世界与数字世界相结合的技术&#xff0c;通过将现实世界中的物体、系统或过程以数字化的方式进行建模和仿真&#xff0c;实现了真实世界与虚拟世界的互通。 在建筑行业中&#xff0c…

酷开系统 | 酷开科技,让数据变得更有价值!

身处信息时代&#xff0c;我们每个人时刻都在生成、传递和应用数据&#xff0c;数据已经成为了现代社会中宝贵的资源之一&#xff0c;而在人工智能领域&#xff0c;数据更是被称为人工智能的“燃料”。 而在AI的发展中&#xff0c;只有拥有高质量、多样性且充分代表性的数据集…

Sqli-labs1~65关 通关详解 解题思路+解题步骤+解析

Sqli-labs 01关 (web517) 输入?id1 正常 输入?id1 报错 .0 输入?id1-- 正常判断是字符型注入&#xff0c;闭合方式是这里插一句。limit 100,1是从第100条数据开始&#xff0c;读取1条数据。limit 6是读取前6条数据。 ?id1 order by 3-- 正常判断回显位有三个。?id…

途乐证券|医药板块走高,神奇制药、双成药业涨停,科源制药等拉升

医药板块3日盘中震动走高&#xff0c;截至发稿&#xff0c;睿智医药涨超15%&#xff0c;景峰医药、神奇制药、双成药业等涨停&#xff0c;誉衡药业、科源制药涨约7%&#xff0c;精华制药、赛托生物涨约6%。 途乐证券指出&#xff0c;医药商场当前仍处于磨底行情&#xff0c;但行…

手机商城免费搭之java商城 电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…

Kali搭建Suricata环境及使用方式

这个和上一个snort如出一辙&#xff0c;并且兼容snort的规则&#xff0c;有一个有的没的我就不赘述了&#xff0c;直接开整&#xff01; 开整&#xff01; 0x01 环境0x02 配置0x03 使用 0x01 环境 kali2021 && suricata apt install suricata #安装 suricata-updat…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 5

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

远程仓库的操作

一、远程仓库的操作命令 git remote # 查看当前项目关联的远程库 我事先关联了一个GitHub的远程仓库&#xff0c;关于如何关联远程仓库&#xff0c;可以看这篇文章远程仓库GitHub和Gitee_林涧泣的博客-CSDN博客 git remote add [仓库服务器名] [远程仓库地址] # 关联远程仓库…

天气API强势对接

&#x1f935;‍♂️ 个人主页&#xff1a;香菜的个人主页&#xff0c;加 ischongxin &#xff0c;备注csdn ✍&#x1f3fb;作者简介&#xff1a;csdn 认证博客专家&#xff0c;游戏开发领域优质创作者,华为云享专家&#xff0c;2021年度华为云年度十佳博主 &#x1f40b; 希望…

【深度学习】SMILEtrack: SiMIlarity LEarning for Multiple Object Tracking,论文

论文&#xff1a;https://arxiv.org/abs/2211.08824 代码&#xff1a;https://github.com/WWangYuHsiang/SMILEtrack 文章目录 AbstractIntroductionRelated WorkTracking-by-DetectionDetection methodData association method Tracking-by-Attention Methodology架构概述外观…

汽配企业为什么需要MES管理系统解决方案

众所周知&#xff0c;汽配组装是汽车制造的关键环节&#xff0c;而汽配行业变革以精益为终极目标。制造业要想脱颖而出&#xff0c;就需要采用MES生产管理系统&#xff0c;以实现制造、物流、质量的精益化管理。在快速的流水线节拍生产下&#xff0c;汽配MES管理系统不仅提高了…

备忘录模式——撤销功能的实现

1、简介 1.1、概述 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤。当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原。当前很多软件都提供了撤销&#xff08;Undo&#xff09;操作&#xf…

Mybatis引出的一系列问题-Mybatis缓存机制的探究

Mybatis 使用到了两种缓存&#xff1a;本地缓存&#xff08;local cache&#xff09;和二级缓存&#xff08;second level cache&#xff09;。 一级缓存默认是开启的&#xff0c;而且不能关闭&#xff0c;MyBatis的一些关键特性&#xff08;例如通过<association>和<…

亚马逊采集淘宝(实现跨平台电商商品同步)

跨平台电商已成为当前电商行业的发展趋势&#xff0c;亚马逊作为全球的电商平台之一&#xff0c;为了更好地服务消费者&#xff0c;近期开始采集淘宝商品&#xff0c;并实现同步。 1. 亚马逊采集淘宝商品的背景 近年来&#xff0c;随着全球电商市场的不断扩大&#xff0c;跨平…

aspose-words、itextpdf完美解决java将word、excel、ppt、图片转换为pdf文件

我是傲骄鹿先生&#xff0c;沉淀、学习、分享、成长。 如果你觉得文章内容还可以的话&#xff0c;希望不吝您的「一键三连」&#xff0c;文章里面有不足的地方希望各位在评论区补充疑惑、见解以及面试中遇到的奇葩问法 面对日常开发过程中&#xff0c;将各种文件转换为pdf文件的…

MQ(一)-MQ理论与消息中间件简介

MQ理论 队列&#xff0c;是一种FIFO 先进先出的数据结构。消息&#xff1a;在不同应用程序之间传递的数据。将消息以队列的形式存储起来&#xff0c;并且在不同的应用程序之间进行传递&#xff0c;这就成了MessageQueue。MQ通常三大作用&#xff1a; 异步、解耦、限流 Spring…

【k8s】二进制部署k8s

二进制部署k8s 1.操作系统初始化配置2.部署etcd集群3.部署docker引擎4.部署Master组件4.部署 Worker Node 组件 二进制搭建 Kubernetes v1.20 k8s集群master01&#xff1a;192.168.80.10 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xf…

前端实现打印1 - 使用 iframe 实现 并 分页打印

目录 打印代码对话框预览打印预览 打印代码 <!-- 打印 --> <template><el-dialogtitle"打印":visible.sync"dialogVisible"width"50%"top"7vh"append-to-bodyclose"handleClose"><div ref"print…

京东API分享:获取京东商品评论接口

接口名称&#xff1a;item_review-获得JD商品评论 接口背景介绍&#xff1a; 京东是一家中国知名的综合性电商平台&#xff0c;成立于1998年。作为中国最大的B2C在线零售商之一&#xff0c;京东提供了包括电子产品、家居用品、服装配饰、食品饮料等在内的广泛商品选择。为了…