zoukankan      html  css  js  c++  java
  • 面试题:两数之和

    题目

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    

    解题方案

    方法一 -----暴力循环

    思路

    直接循环数组(两层循环),判断其和是否等于target,如果有,则输出各自的下标,若没有,则抛出异常 代码:

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            for(int i=0; i<nums.length; i++) {
                for(int j = i+1; j<nums.length; j++) {
                    if(nums[i] + nums[j] == target) {
                        return new int[]{i, j};
                    }
                }
            }
            throw new IllegalArgumentException("数组中不存在元素相加得到target");
        }
    }

    复杂度分析

    时间复杂度:O(n^2)
    对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费O(n) 的时间。因此时间复杂度为 O(n^2)。

    空间复杂度:O(1)。

    方法二 

    思路

    将数组里的数据存入到一个HashMap中,key为数组的数据,value则为数组下标值。然后循环此数组,判断target与当前数组值的差是否在HashMap中,如果在,并且下标不是当前元素,则输出二者的下标值

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            Map<Integer, Integer> dataMap = new HashMap<>();
            for(int i=0; i<nums.length; i++) {
                dataMap.put(nums[i], i);
            }
    
            for(int j=0; j<nums.length; j++) {
                int value = target - nums[j];
                if(dataMap.containsKey(value) && dataMap.get(value) != j) {
                    return new int[]{j, dataMap.get(value)};
                }
            }
    
            throw new IllegalArgumentException("数组中不存在元素相加得到target");
        }
    }

    复杂度分析

    时间复杂度:O(n),
    我们把包含有 n 个元素的列表遍历两次。由于哈希表将查找时间缩短到 O(1),所以时间复杂度为 O(n)。

    空间复杂度:O(n),
    所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n 个元素。

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/alimayun/p/12788229.html
Copyright © 2011-2022 走看看