zoukankan      html  css  js  c++  java
  • LeetCode每日一题(一):两数之和

    题目:
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

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

    暴力解法:(双重循环)

    class Solution {
    
        /**
         * @param Integer[] $nums
         * @param Integer $target
         * @return Integer[]
         */
        function twoSum($nums, $target) {
            $res = array();
            $count =  count($nums);
            for($i=0; $i<$count-1; $i++){
                for($j=$i+1; $j<$count; $j++){
                    $sum = $nums[$i]+$nums[$j];
                    if($sum == $target){
                        $res = [$i, $j];
                    }
                }
            }
            return $res;
        }
    }

    执行用时1900 ms,内存消耗15.8Mb

    优化:(键值颠倒)

    class Solution {
    
        /**
         * @param Integer[] $nums
         * @param Integer $target
         * @return Integer[]
         */
        function twoSum($nums, $target) {
            $found = [];
            foreach($nums as $key => $val){
                $diff = $target - $val;
                if(!isset($found[$diff])){
                    $found[$val] = $key;
                    continue;
                }
                return [$key, $found[$diff]];
            }
        }
    }

    执行用时12ms,内存消耗16.1Mb

    第一种方法最暴力最耗时,第二种方法则是利用空间换时间

    慢慢来才是最快的
  • 相关阅读:
    vue子组件获取父组件方法
    css hack
    【Educational Codeforces Round 87 (Rated for Div. 2)】前4题
    【某次ks】20200512
    NoI Online 2反思
    RMQ&LCA
    杂谈
    高手训练矩乘T3
    0118ACM自闭赛
    网络流初步学习笔记
  • 原文地址:https://www.cnblogs.com/jongty/p/11653700.html
Copyright © 2011-2022 走看看