TwoSum问题
2016-04-06 13:55
113 查看
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].我的算法public int[] solution(int[] nums,int target){Map<Integer,Integer> map=new HashMap<Integer,Integer>();int[] res=new int[2];for(int i=0;i<nums.length;i++){if(map.containsKey(target-nums[i])){res[0]=i;res[1]=map.get(target-nums[i]);}map.put(nums[i], i);}return res;}网上还有一种不使用HashMap的方法,但是当数组中有重复的数出现时可能会出现数组越界问题public int[] solution2(int[] nums,int target){int[] nums_sorted=new int[nums.length];System.arraycopy(nums,0, nums_sorted, 0, nums.length);Arrays.sort(nums_sorted);int start=0;int end=nums_sorted.length;while(start<end){while(nums_sorted[start]+nums_sorted[--end]>target);if(nums_sorted[start]+nums_sorted[end]==target)break;while(nums_sorted[++start]+nums_sorted[end]<target);if(nums_sorted[end]+nums_sorted[start]==target)break;}int[] res=new int[2];int index=0;int a=nums_sorted[start];int b=nums_sorted[end];for(int i=0;i<nums.length;i++){if(nums[i]==a||nums[i]==b)res[index++]=i;}return res;}加油!b662
相关文章推荐
- JavaScript获取DOM元素位置和尺寸大小
- struct 大小计算
- Linux内核分析(第七周)
- ios开发--高德地图SDK使用简介
- 公司100个用户桌面虚拟化该怎么做?
- lucene建立索引时候的用到的一些文档和目录操作
- easy start of docker on ubuntu14.04 x64
- 1018:放苹果(递归)
- ESXi 5.0设置时间
- Socket编程学习之道:揭开Socket编程的面纱
- php7 install memcache extension
- 软件学习网址
- [HDOJ2196]Computer (树直径, 树DP)
- webpack处理非模块化的几方法
- 299. Bulls and Cows
- html 头信息基本内容
- c语言自评/
- 设计模式之享元模式
- 【Redis源码剖析】 - Redis内置数据结构之压缩列表ziplist
- C++之重载函数