【算法】LeetCode算法题-Two Sum-程序员宅基地

技术标签: java  开发工具  数据结构与算法  

程序 = 数据结构 + 算法。

算法是每一位程序员学习成长之路上无法避开的重要一环,并且越早接触越好。今后会每天做些算法题,至少每天做一道题目,同时会记录自己的解题思路和代码,通过【算法】专题来分享。针对数据结构这一块的知识,我也会抽时间补习,毕竟不是科班出生,从长远看,数据结构与算法学的越早越扎实越好,不管你使用的是哪一种开发语言。

01 看题和准备

给定一个整数数组和一个目标整数,该目标整数满足数组中两元素之和,返回数组中两个数字的下标索引,以数组形式表示结果。例如给定数组int[] nums = [2, 7, 11, 15],目标整数int target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,返回包含两数索引的数组[0, 1]。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 分析题目

这道题目求的是数组内任意两元素之和等于给定的目标整数,于是很容易想到数组for循环遍历,并且是两层for循环,于是第一版的代码思路已经有了。

public int[] twoSum(int[] nums, int target) {
    int[] result = new int[2];
    if (nums.length < 2) {
        return null;
    }
    try {
        for (int i=0; i<nums.length; i++) {
            for (int j=i+1; j<nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    result[0] = i;
                    result[1] = j;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return result;
}
复制代码

03 是否还可以优化?

上面的解法是两层循环,循环次数是n*(n-1)次,n为数组元素个数,n越大,程序执行的时间越长,那能不能只循环一次?既然可以做加法匹配,那做减法呢?先拿到目标整数与数组中每位元素的差值,再去判断此差值是否存在于此数组中。这时,我们需要一个存新数据的集合,既包含每位元素,也包含每位元素的索引,对此选取Map作为存放新数据的对象。

public int[] twoSum2(int[] nums, int target) {
    int[] result = new int[2];
    if (nums.length < 2) {
        return null;
    }
    try {
        Map<Integer, Integer> map = new HashMap<>();
        for (int k=0; k<nums.length; k++) {
            int num = target - nums[k];
            if (map.containsKey(num)) {
                result[0] = map.get(num);
                result[1] = k;
            }
            map.put(nums[k], k);
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return result;
}
复制代码

第二版的解法只用了一层循环,对比第一版解法,从时间花费上看,第二版的解法是优于第一版的。

04 小结

本篇只是作为一个开题,后续会将其他算法题按照上面的格式分享给大家,如果有什么好的解法、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33827965/article/details/91390382

智能推荐

关于IDEA使用tomcat远程部署Windows服务器的相关配置_idea 是否支持window remote部署-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏4次。疫情期间响应国家号召,在家待着不出门,但是又有点无聊,就搞起来一直想搞又没时间搞的服务器。网上的例程都是基于本地模拟服务器的,他们的配置方法在本地用都是好用,等到真正部署服务器的时候就出问题了,我折腾了好几天,终于部署成功,特开此贴,分享一下期间遇到的坑,废话不多说直接开始讲解。 我用的服务器是租用的阿里云服务器,系统是windows server2008 R2,选用这个系统的原因是图形界面,..._idea 是否支持window remote部署

某外资集团诚招 JAVA,Web,UI,QA,BA,Big Data等技术开发测试工程师(上海)_java 上海 english-程序员宅基地

文章浏览阅读1.2k次。花旗集团诚招 JAVA,Web,UI,QA,BA,Big Data等技术开发测试工程师(上海)投简历请加微信:1208568081Data Capability Solution Lead (C13) SHANGHAI [20221349]职务描述The Data Analytics Lead Analyst is a strategic professional who stays abreast of developments within own field and contri_java 上海 english

VS2017生成一个简单的DLL文件 和 LIB文件——C语言-程序员宅基地

文章浏览阅读2k次。下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件)生成动态库文件姿势一:第一步:新建一个项目第二步:选择Windows桌面向导(这里先不要去管上面的“动态链接库(DLL)”)第三步:选择动态链接库,并空项目打勾√..._vs 生成dll时.lib文件中是哪个文件中的函数

java.lang包的简单介绍_java.lang是什么意思-程序员宅基地

文章浏览阅读7.3k次,点赞2次,收藏19次。java.lang包是Java语言的核心类库(lang是language的缩写),包括了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动地引入java.lang包,所以这个包的加载是缺省的。 ..._java.lang是什么意思

VirtualBox + CentOS 使用 NAT + Host-Only 方式联外网_nat和host only 一起用-程序员宅基地

文章浏览阅读1.2k次。virtualbox版本5.2.10 r122406 centos版本6.5_x64最近在配置本地虚拟机环境,之前纠结于NAT模式可以连外网,Host-Only模式只能连宿主机,配置环境的时候来回切比较烦。本来打算走网络共享路线来实现Host-Only模式下连接外网的,但是没有成功。问度娘半天终于实现NAT+Host-Only的方式联网1、设置全局网络管理网络CIDR设置为192.1..._nat和host only 一起用

随便推点

tiktok达人带货怎么操作?-程序员宅基地

文章浏览阅读404次,点赞10次,收藏9次。海外版抖音作为一款短视频平台,与传统的长视频平台不同,短视频平台的用户以较年轻的用户群体为主,那么这也就间接的决定了我们外贸人在海外版抖音上销售的商品不能是太过于贵的,如果一旦海外版抖音上上架的商品太贵的话,我们就很有可能丧失掉绝大部分的年轻用户,因为这部分的年轻用户大多数还没有稳定的工作,或者工作经验少,工资较低,不能够支撑其太贵的货物购买需求。TikTok上面的内容比较多样化,木身覆盖的用户群也足够大,所以吸引的人群比较多样,不管是内容营销还是网红营销,都能带来巨大的低成本曝光。TikTok+独立站。

华为EI和HiAI概览_华为hi和ei的区别-程序员宅基地

文章浏览阅读346次。_华为hi和ei的区别

Qt更改字体为思源黑体_qt 思源黑体-程序员宅基地

文章浏览阅读5.8k次,点赞4次,收藏20次。由于微软雅黑字体版权限制,现更改Qt应用程序默认字体为思源黑体-Mdeium黑度。直接在ui环境中更改字体需要运行机安装过思源黑体,故而只能在qrc中添加字体文件SourceHanSansCN-Medium.otf,然后在main函数中动态加载字体文件: int loadedFontID = QFontDatabase::addApplicationFont(":font/SourceHanSansCN-Medium.ttf"); QStringList loadedFontFa..._qt 思源黑体

python-docx高亮单词_python查找单词高亮显示-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏8次。最近在读经济学人,阅读的时候遇到不认识的单词不想停下来查词典,我寻思如果这些单词的中文解释自动标注在旁边就好了。之前我已经做了个小工具(link),阅读的时候运行程序不断读取剪切板里的英文单词,并生成对应的中文解释,但是我无法在手机上使用程序。为了解决这个问题,我需要利用计算机将文章里我可能不认识的单词自动翻译并标注,这样省去了手机上阅读时的查询过程,从而实现流畅阅读。代码思路1.以雅思词库(7600)作为我认识的词汇,创建excel文件word_list(将来会将更多单词写入文件,并利用excel排_python查找单词高亮显示

喝汽水问题(C语言)_祝大家题题都ac-程序员宅基地

文章浏览阅读363次,点赞9次,收藏10次。刷题_祝大家题题都ac

VS2017代码自动对齐快捷键_vs c++如何一键对其-程序员宅基地

文章浏览阅读6.2k次。VS2017代码自动对齐快捷键 C#:Ctrl + K + D C++:Ctrl+K+F(松开K后再按F) _vs c++如何一键对其

推荐文章

热门文章

相关标签