zoukankan      html  css  js  c++  java
  • 01-两数之和

    1.问题

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

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    Input: nums = [2, 7, 11, 15], target = 9
    Output: [0, 1]

    2.思路

    1.暴力法
    两个嵌套for循环遍历数组,找出和为目标值的两个整数,并以数组形式返回下标。

    时间复杂度为O(n^2),空间复杂度为O(1)

    2.一遍哈希表
    先把数组nums的各元素值及序号存入HashMap中,再从该表中查找是否包含target-nums[x]的元素。
    这两个操作可以合在一起,因此可以把遍历两遍哈希表改进为遍历一遍。

    时间复杂度O(n),空间复杂度O(n)

    3.题解

    暴力法

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            for(int i=0;i<nums.length-1;i++){
                for(int j=i+1;j<nums.length;j++){
                    if(target==nums[i]+nums[j]){
                        return new int[]{i,j};
                    }
                }
            }
            return null;
        }
    }
    

    一遍哈希表

    class Solution {
        public int[] twoSum(int[] nums, int target) {
            Map<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                int complement = target - nums[i];
                if (map.containsKey(complement)) {
                    return new int[] { map.get(complement), i };
                }
                map.put(nums[i], i);
            }
            throw new IllegalArgumentException("No two sum solution");
        }
    }
    
    花五年时间成为某个领域的专家
  • 相关阅读:
    删除目录软链接注意事项
    使用Dnsmasq搭建本地dns服务器上网
    在CentOS 7 上安装广告服务器 Revive Adserver
    CentOS6 Squid代理服务器的安装与配置
    CentOS6 PXE+Kickstart无人值守安装
    Redis的初步安装
    创建交互式shell脚本对话框
    C 捕获 lua 异常错误
    iic 之24C256存储器 及PCF8563
    汉字的编码与字模点阵小结
  • 原文地址:https://www.cnblogs.com/sang-bit/p/11559729.html
Copyright © 2011-2022 走看看