[LeetCode]Two Sum
来源:互联网 发布:网络机顶盒有哪些牌子 编辑:程序博客网 时间:2024/06/05 19:11
题意:求出某个数组中的两个数值的和等于一个固定的target的该两个数值的下标,按从小到大的顺序.
解题思路:
1: 直接暴力遍历 复杂度O(n*n) 超时
2:先排序,再遍历 增加了空间复杂度,时间复杂度为O(N+N*log(N)+N)
3:有人建议用HashMap但是如果有重复数据就应该是不成立的,思路二的解法如下:
解题思路:
1: 直接暴力遍历 复杂度O(n*n) 超时
2:先排序,再遍历 增加了空间复杂度,时间复杂度为O(N+N*log(N)+N)
3:有人建议用HashMap但是如果有重复数据就应该是不成立的,思路二的解法如下:
public int[] twoSum(int[] numbers, int target) { <span style="white-space:pre"></span>assert (numbers == null || numbers.length < 2); class node {//辅助类 int index; int value; public node(int index, int value){ this.index = index; this.value = value; }; } int[] rs = { 0, 0 }; List<node> nodes = new ArrayList<node>(); for (int index = 0 ;index< numbers.length; ++index){ nodes.add(new node(index+1, numbers[index]));//index 从1开始 } Collections.sort(nodes, new Comparator<node>() {//排序 @Override public int compare(node o1, node o2) { return o1.value - o2.value; } }); int i = 0, j = nodes.size()-1; while (i<j){ int v1 = nodes.get(i).value; int v2 = nodes.get(j).value; if(v1 + v2 > target){ j --; continue; } if(v1 + v2 == target){ rs[0] = Math.min(nodes.get(i).index, nodes.get(j).index); rs[1] = Math.max(nodes.get(i).index, nodes.get(j).index); return rs; } if(v1 + v2 < target){ i ++; continue; } } return rs; }
0 0
- 【Leetcode】Two Sum (Sum)
- LeetCode: Two Sum
- LeetCode: Two Sum
- [Leetcode] Two Sum
- LeetCode : Two Sum
- Leetcode: Two Sum
- leetcode 46: Two Sum
- [LeetCode] Two Sum
- LeetCode 1 - Two Sum
- Leetcode : Two Sum
- 【leetcode】Two Sum
- [LeetCode]Two Sum
- leetcode Two Sum
- [Leetcode] Two Sum
- [leetcode] Two Sum
- LeetCode - Two Sum
- leetcode之Two Sum
- LeetCode | Two Sum
- J2EE基础总结(2)——Servlet/JSP
- House Robber
- hdu 3245 zoj 3188 Treeland Exhibition (树形dp)
- 用数据驱动思想来设计游戏
- 关于struts的小异常
- [LeetCode]Two Sum
- webAPP开发的问题(总结)
- C++ 实现读取URL中的源码
- Struts1和Struts2 的一些对比
- CSS制作用户登录和用户注册的用户体验表单
- C++实现字符串替换的两种方法
- java 服务器 获取web端IP
- Git使用方法
- logback使用