您的位置:首页 > 编程语言

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

2015-07-10 10:48 429 查看
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;

}

}

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








                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: