leetcode01-Two Sum之beats99.47%Java版本

我的leetcode击败90%之旅,该篇章主要完成使用Java实现算法,达到进入10%的阵营。这是第一篇Two Sum

全部代码下载:

Github链接:github链接,点击惊喜;

写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github;多谢;

1.题目简介:只给英文了

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution.

Example:

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

UPDATE (2016/2/13):

The return format had been changed to zero-based indices. Please read the above updated description carefully.

2.我的思路:

1.循环记录每个数字,同时判断target-num是否出现过。是就输出

2.第一思路使用hashmap保存数组的出现

2.使用桶记录出现的target-num,比使用hashmap更快 *击败99.47%

3.我的代码

public class Solution {
    //使用桶记录出现的target-num
    public int[] twoSum(int[] nums, int target) {
        int length=nums.length;
        int[] a=new int[]{0,0};
        if(nums==null||length<=0)
          return a;
       int[] tars=new int[100000];//nums[i]正数的桶记录
        int[] tarsf=new int[100000];//nums[i]负数的桶记录
        for(int i=0;i<length;i++){
            int k=target-nums[i];
            if(k<0){
                 if(tarsf[-k]!=0){
                a[0]=tarsf[-k]-1;
                a[1]=i;
                break;
              }else{
                if(nums[i]<0)
                {
                  tarsf[-nums[i]]=i+1;   //i+1是为了将数组初始化的0区分开
                }
                else
                   tars[nums[i]]=i+1;//i+1是为了将数组初始化的0区分开
            }
            }else{
            if(tars[k]!=0){
                a[0]=tars[target-nums[i]]-1;
                a[1]=i;
                break;
            }else{
                if(nums[i]<0)
                {
                  tarsf[-nums[i]]=i+1;
                }
                else
                   tars[nums[i]]=i+1;
            }
        }
        }
        return a;
    }
}

4.使用过的低效代码:

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int length=nums.length;
        int[] a=new int[]{0,0};
        if(nums==null||length<=0)
          return a;
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target-nums[i])) {
                a[0]=map.get(target-nums[i]);
                a[1]=i;
                return a;
            } else {
                map.put(nums[i], i);
            }
        }
        return new int[]{0, 0};
    }
}

好的本章介绍到这里

来自伊豚wpeace(rlovep.com)

时间: 2024-08-28 23:58:15

leetcode01-Two Sum之beats99.47%Java版本的相关文章

libsvm java版本使用心得(转)

http://blog.csdn.net/u010340854/article/details/19159883 https://github.com/cjlin1/libsvm 项目中要用到svm分类器,自己实现的话太费时间,于是寻找开源实现,找到了libsvm. Java版本是一个jar包,引入到工程中即可使用. 需要注意的是,java版本充满了c++风格(类名小写,命名使用下划线_分隔等等),使用者需要稍微适应一下. 核心类是svm类,最常用的几个方法如下(都是static方法): svm

微信开发资料大全 java版本;教程文档、代码、视频

一.官网 1.1 账号申请 https://mp.weixin.qq.com 1.2 开发者模式 1.1 登录后,选择开发者中心 1.3 测试账号申请 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 1.4 开发接口文档 http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 1.5 调试工具接口 http://mp.weixin.qq.

你的程序支持复杂的时间调度嘛?如约而来的 java 版本

你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] 这样利于分割,配置,清晰. 然后就是验证,时间在不在配置的时间开发内? 当然想到的*肯定是默认支持所有的 [2015][7][*][*][10:00-11:59] 这个格式,表示2015年的7月每一天的10点到12点为配置开启时间 [2015][7-9][*][*][10:00-11:59] 这个格

atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本

atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本 1. 去除边框思路原理 1 2. Thumbnailator 是一个用来生成图像缩略图.裁切.旋转.添加水印等操作 2 3. OpenCL的Java库 JavaCL 2 4. Java Image Filters是一款基于Java的图像处理类库,特别是在图像滤镜特效方面, 2 4.1.1. 色彩调整 2 4.1.2. 变形和扭曲 5 5. JJIL 是一个Java 的图像处理类库,有超过60

解决N个人过桥时间最短问题(Java版本)

[问题描述] n个人要晚上过桥,在任何时候最多两个人一组过桥,每组要有一只手电筒.在这n个人中只有一个手电筒能用,因此要安排以某种往返的方式来返还手电筒,使更多的人可以过桥.   注意:每个人的过桥速度不同,每组的速度由过桥最慢的人所用的时间决定,约定n<=1000,并且没有人的过桥时间会超过100秒. [输入] 输入的第一行给出n, 接下来的n行给出每个人的过桥时间,不会超过1000人,且没有人的过桥时间会超过100秒. 4 1 2 5 10 [输出] 输出的第一行给出所有n个人过桥的总的秒数

JAVA 版本微信公众账号开源项目招募新成员

大家好: jeecg开源社区,目前正在开展"JAVA 版本微信公众账号开源项目"的开发工作,欢迎有兴趣的朋友一起参与! 截止时间:20140510 详细联系方式:445654970 要求: 1.熟悉jeecg技术平台: 2.有足够的业余时间参与: 官方网站:http://www.jeecg.org/ JAVA 版本微信公众账号开源项目招募新成员,布布扣,bubuko.com

Java版本

Java版本分为J2SE(Java 2 Standard Edition,Java标准版).J2ME(Java 2 Micro Edition,Java微型版本)和J2EE(Java 2 Enterprise Edition,Java企业版)三个体系. JavaSE就是指Java的基础语法和一些Java平台提供的基础类库.而后面两者可以看作是前者的基础上添加一些针对某个领域的类库和框架.并不是说有好几个语法版本的Java.开发时除了安装标准版的Java后两者还需要其它的扩展工具. JavaME是

修改mac中mvn 的 java 版本

在mac 中可以使用jenv 管理 jdk 的多个版本. 但是,jenv 不能管理mvn的java 版本. 方法是:创建一个mvn的脚本 add the following to your ~/.mavenrc: 1. vi ~/.mavenrc 2. add the following sentence in the ~/.mavenrc file. export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Content

centos 7 java版本切换

有一个项目需要java 1.7配合,原服务器上已安装java 1.8,需要切换版本到java 1.7. 查看centos7支持的java版本 yum search java|grep java-1 java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos java-1.6.0-openjdk-devel.x86_64 : OpenJDK Develo