当前位置: 首页 > news >正文

【LeeCode】Two Sum

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

问题描述

给定一个整型数组,找出加起来为给定结果的两个数字所在数组的下标。 假定每次给定的数据只能有一个答案,并且同一数字不能使用两次。 示例:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

个人版本

解题思路:

遍历整个数组,当发现当前数字大于结果时,排除。如果小于或等于时,使用给定结果减去当前数字得到结果a,然后遍历剩余数字,如果发现有等于a的数字时,则表明找到结果;如果遍历未找到,则继续该流程。最好的情况,遍历一次;最坏的情况,遍历数组元素个数减1次。

代码(Java版本)

public int[] twoSun(int[] sourceNumbers, int target) {
    int[] result = new int[2];
    int position = 0;
    final int arrayLength = sourceNumbers.length;
    boolean isFound = false;
    for (int i : sourceNumbers) {
        if (i <= target) {
            int numToFind = target - i;
            for (int j = position + 1; j < arrayLength; j++) {
                if (numToFind == sourceNumbers[j]) {
                    result[0] = position;
                    result[1] = j;
                    isFound = true;
                    break;
                }
            }
        }
        if (isFound) {
            break;
        }
        position++;
    }

    return result;
}

票数最高版本

解题思路

利用了Java中Map的key不能重复的特性,遍历一次即可找出结果。

代码(Java版本)

public int[] twoSum(int[] numbers, int target) {
int[] result = new int[2];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < numbers.length; i++) {
    if (map.containsKey(target - numbers[i])) {
        result[1] = i + 1;
        result[0] = map.get(target - numbers[i]);
        return result;
    }
    map.put(numbers[i], i + 1);
}
return result;

}

总结

通过上述比较,可见对于算法和语言特性需要进一步深入的了解,后期遇到问题也会比较容易通过已有途径进行快速解决。

转载于:https://my.oschina.net/wnayuanbiao/blog/1058174

相关文章:

  • Alexnet参数解释
  • es6的常用语法
  • asp.net 点击girdView中的超链接列复制地址--源码--调试成功
  • 定制用户不使用某个帐号
  • 解读sencha touch移动框架的核心架构(一)
  • DataView(2):RowState
  • Spark学习笔记之相关记录
  • Js实现Repeater全选/反选 功能 终极解决方案
  • MySQL主从复制读写分离及奇怪的问题
  • SQL server 2005中新增函数及操作(ZT)
  • 智能分单算法
  • NHibernate.Search 基于Lucene.NET的全文索引
  • mail退信!
  • 在Spring中发现java.lang.ClassCastException: $Proxy1问题解析
  • (转)setTimeout 和 setInterval 的区别
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017-08-04 前端日报
  • Apache Zeppelin在Apache Trafodion上的可视化
  • bearychat的java client
  • css属性的继承、初识值、计算值、当前值、应用值
  • FastReport在线报表设计器工作原理
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript-Array类型
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mysql_config not found
  • Node + FFmpeg 实现Canvas动画导出视频
  • Python进阶细节
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue.js 移动端适配之 vw 解决方案
  • 大整数乘法-表格法
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端技术周刊 2019-02-11 Serverless
  • 软件开发学习的5大技巧,你知道吗?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序填坑清单
  • 再次简单明了总结flex布局,一看就懂...
  • 正则与JS中的正则
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #pragma data_seg 共享数据区(转)
  • (2015)JS ES6 必知的十个 特性
  • (30)数组元素和与数字和的绝对差
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (TOJ2804)Even? Odd?
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (转)socket Aio demo
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划