两数之和
来源:互联网 发布:网络安全技术保障方案 编辑:程序博客网 时间:2024/06/08 02:16
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum
需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0
开头。
package com.eyric.basic;import org.junit.Test;import java.util.*;/** * 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。 * 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。 * 样例:给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2]. */public class T1_sum_array { //解法一 public int[] twosum(Integer[] numbers, int target) { int[] res = new int[2]; for (int i = 0; i < numbers.length; i++) { int v = numbers[i]; for (int j = i; j < numbers.length; j++) { if (numbers[j] == target - v) { if (i == j) { continue; } res[0] = i + 1; res[1] = j + 1; return res; } } } return res; } //解法二 public int[] twosum2(Integer[] numbers, int target) { int[] res = new int[2]; if (target == 0) { int j = 0; for (int i = 0; i < numbers.length; i++) { if (numbers[i] == 0) { res[j++] = i + 1; if (j == 2) { return res; } } } } Map<Integer, Integer> map = new HashMap<>(); for (int i = numbers.length - 1; i >= 0; i--) { map.put(numbers[i], i); if (map.containsKey(target - numbers[i])) { res[0] = i + 1; res[1] = map.get(target - numbers[i]) + 1; if (res[0] == res[1]) { continue; } return res; } } return null; } @Test public void test() { Integer[] nums = {0, 4, 3, 0}; int target = 0; int[] res = twosum2(nums, target); }}
阅读全文
0 0
- Lintcode 两数之和
- 两数之和
- 题目:两数之和
- LintCode 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 两数之和I
- 两数之和II
- 两数之和III
- 两数之和 (一)
- 两数之和
- 两数之和
- 两数之和
- 两数之和
- 如何通过Mysql的二进制日志恢复数据库数据
- Zyoung
- 内容提供者——读取短信
- C语言宏定义和函数的异同
- Json工具类--使用2.x版本的Jackson实现了Json的序列化和反序列化
- 两数之和
- 10:矩阵转置
- 检测内存泄漏常用工具之Leakcanary
- 排序算法—冒泡排序
- WebViews管理者
- 一款树形表格的插件TreeGrid
- Linux下C++的通用Makefile与解析
- BZOJ 2257: [Jsoi2009]瓶子和燃料 数论
- 利用jquery+css实现侧边栏弹出搜索