LeetCode Two Sum 题库记录--代码小白开始码代码的人生,第一天!

原创 2015年07月10日 10:48:31

1. Two Sum

     服自己了,都不好意思说自己是搞java android开发的,连基本的java定义数组都不会!  int[] array=new int[5];

     返回值也不会,什么return/break/continue;

    踉踉跄跄用java实现了,可是完全不够优化,这就不是个好方法,暴力搜索,时间复杂度O(n*n); 如下

     public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] Index = new int[2];   //java中定义数组都不会int[] array=new int[5];
        for(int i = 0;  i<nums.length; i++ )
        {
            for(int j=i+1; j<nums.length; j++)
            {
                if(nums[i] + nums[j] == target)
                {
                   // System.out.print("Index1 = "+ (i+1) + " , " + "Index2 =" + (j+1));
                    Index[0] = i+1;  //有可能满足这样要求的不止这一对。
                    Index[1] = j+1;
                    break;
                }
            }
        }
    return Index;
    }
}    时间复杂度O(n*n);     Runtime: 500 ms

     继续优化,能不能先对数组排序,并记录排序候在原数组的位置,这样来进行后面的操作后更省事省时。但是有个问题是,返回的要求是Index1 >Index2,所以考虑这种方法是否更有呢?

【     插曲,基础知识补充。

    不过可以自己实现下排序并记录位置的java代码。  //ArrayTest.java

          System.out.println(Arrays.toString(ary));   //一次性正体打印数组
          System.out.println(Arrays.asList(ary)); //可以将 数组转为List 但是,这个数组类型必须是 引用类型的,如果是8种基本数据类型就不可以

     其中asList的学习见如下链接:http://blog.csdn.net/anders_zhuo/article/details/8960996

 参考网上的方法:http://blog.sina.com.cn/s/blog_7bee572b0101ux4q.html   学习使用java的Map HashMap类

  时间复杂复:Runtime: 352 ms     java代码还是比人家常规的java代码复杂好多。。大哭

 
import java.util.HashMap;   
import java.util.Hashtable;
 
public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] Index = new int[2];   //java中定义数组都不会int[] array=new int[5];
        Map map = new HashMap();
        for(int i=0 ; i<nums.length; i++){
            map.put(nums[i],i);
        }
        for(int i=0 ; i<nums.length; i++){
            int gas = target - nums[i];
            if(map.get(gas)!=null && (int)(map.get(gas))!=i){
                Index[0] = i + 1;
                Index[1] = (int)(map.get(gas)) + 1;
                break;
            }
        }
        return Index;
             
    }
}


人家网站上显示的时间复杂复在100~200之间是怎么做到的?

一哭,Runtime: 332 ms

算法思想:分别将所有比较过得数与target的差值一个个放入map中,当比较到map里面含有nums[i]时表示已经找到了这两个数。

 public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] Index = new int[2];   //java中定义数组都不会int[] array=new int[5];
        HashMap<Integer, Integer>  map = new HashMap<Integer, Integer>();
         
        for(int i =0; i<nums.length; i++){
            if(map.containsKey(nums[i])){
                Index[0]=map.get(nums[i])+1;
                Index[1]= i+1;
                break;
            }else{
                map.put(target-nums[i],i);
            }
        }
        return Index;
    }
}

本问题存在的问题:当不止一对数满足该要求时,但只返回了一对。


        

 

   




 

版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode Power of Two java--代码小白开始苟延残喘第五天的刷题

苦逼的触及着码农之门:昨天刚开始想着从简单的题目开始刷题,就被这所谓的第一道easy题目刷的搞了一早上搞得蓬头垢面,我决定在坚持一点时间,如果自己码代码的能力依旧入刺之弱的话,就考虑毕业后就转行。。 ...

Two Sum leetcode c++

  • 2015年10月01日 10:47
  • 763B
  • 下载

【LeetCode刷题记录】Two Sum

题目Given an array of integers, find two numbers such that they add up to a specific target number.The...

LeetCode代码分析——4. Median of Two Sorted Arrays

一道找中间数的题,两个排序好的数组 最简单粗暴的方法很容易,就是搞个排序(归并分治策略的最后一步合并两个排序好的数组?or快排?),然后找到(m+n)/2位置的数 下面这种思想认为找中间数就是找第...

如何从零开始写一份标准的TensorFlow代码(面向小白编程)

一步一步对照代码写出规范的TensorFlow代码,面向只会函数式Python编程的小白(如鄙人)...

小白学习记录-代码的移植

从字面上理解,可移植性说的就是,在一个平台上开发的代码,通过比较少的改动就能够在另外一个平台上使用。不同的平台可以指具有不同的处理器架构,比如x86和arm;或不同的操作系统,比如windows和li...

【LeetCode-面试算法经典-Java实现】【001-Two Sum(求两个数的和)】

给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。要求:这个函数twoSum必须要返回能够相加等于目标数字的两个数的索引,且index1必须要小于index2。请注意一点,你返回的结果(包...

leetcode-1 Two Sum 找到数组中两数字和为指定和

问题描述:在一个数组(无序)中快速找出两个数字,使得两个数字之和等于一个给定的值。假设数组中肯定存在至少一组满足要求。 《剑指Offer》P214(有序数组) 《编程之美》P176 Que:Giv...

leetcode解题笔记:Two sum系列解题思路

Two Sum 3Sum 3Sum Closest Two SumGiven an array of integers, return indices of the two numbers such ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode Two Sum 题库记录--代码小白开始码代码的人生,第一天!
举报原因:
原因补充:

(最多只允许输入30个字)