博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode — two-sum
阅读量:6370 次
发布时间:2019-06-23

本文共 2453 字,大约阅读时间需要 8 分钟。

package org.lep.leetcode.twosum;import java.util.Arrays;import java.util.HashMap;import java.util.Map;/** * source:https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/#/description * Created by lverpeng on 2017/6/21. * * Given an array of integers, find two numbers such that they add up to a specific target number. * * The function twoSum should return indices of the two numbers such that they add up to the target, * where index1 must be less than index2. Please note that your returned answers (both index1 and index2) * are not zero-based. * * You may assume that each input would have exactly one solution. * * Input: numbers={2, 7, 11, 15}, target=9 * Output: index1=1, index2=2 * */public class TwoSum {    public static void main(String[] args) {        TwoSum twoSum = new TwoSum();        int[] numbers = {2, 7, 11, 15};        System.out.println(Arrays.toString(twoSum.twoSum(numbers, 9)));        System.out.println(Arrays.toString(twoSum.twoSumUseHash(numbers, 9)));    }    /**     * 最简单的方法对于数组中每一个数,依次遍历其后每一个数字,直到找到两个和为target的数字     * 时间复杂度:O(n^2)     * 空间复杂度:O(1)     *     * @param numbers     * @param target     * @return     */    public int[] twoSum (int[] numbers, int target) {        int[] result = new int[2];        for (int i = 0; i < numbers.length; i ++) {            for (int j = i; j < numbers.length; j++) {                if ((numbers[i] + numbers[j]) == target) {                    result[0] = i + 1;                    result[1] = j + 1;                    return result;                }            }        }        return result;    }    /**     * 由于上面第二次循环只是在查找一个数,那么就可以使用hash来查找,将第一个对应的另一个加数依次添加到hash表里,降低时间复杂度     * 时间复杂度:O(n)     * 空间复杂度:O(n)     *     * @param numbers     * @param target     * @return     */    public int[] twoSumUseHash (int[] numbers, int target) {        int[] result = new int[2];        Map
needOtherNum = new HashMap
(); //
for (int i = 0; i < numbers.length; i++) { // 如果当前num是前面数字所需要的另外一个加数,说明找到了 if (needOtherNum.containsKey(numbers[i])) { result[0] = needOtherNum.get(numbers[i]) + 1; result[1] = i + 1; break; } else { // 如果没有找到,则把当前数字所需要的另外一个加数添加到map中 needOtherNum.put(target - numbers[i], i); } } return result; }}

转载于:https://www.cnblogs.com/sunshine-2015/p/7208458.html

你可能感兴趣的文章
Tengine动态模块扩展
查看>>
HanLP二元核心词典详细解析
查看>>
Paxos——分布式一致性算法解析
查看>>
终于拿到证了....
查看>>
Java程序员: 选择比努力更重要
查看>>
PDF编辑技巧:怎么提取PDF文件中的页面
查看>>
使用bash shell 查看Linux系统的CPU和内存
查看>>
fuse文件系统
查看>>
全球首个大网级网络操作系统CNOS正式发布
查看>>
C经典实例
查看>>
Oracle图形化的数据库管理工具
查看>>
Oracle用户、权限、角色管理
查看>>
iostat命令学习
查看>>
Spring Tool Suite生成默认的MVC项目的配置文件问题
查看>>
使用subversion搭建SVN
查看>>
单调队列
查看>>
健康第一
查看>>
【Intellij idea】spring中@Autowired注入失败
查看>>
C语言设计模式(命令模式)
查看>>
会计的思考(42):会计如何转变为公司的内部财务顾问
查看>>