基础算法 - 两数之和 (暴力循环和一遍哈希表)

题目

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

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

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

需求思路

  • 时间置换空间 想要空间 暴力循环
    时间最差解法 每次用目标值target 数组中的值(从数组下标0开始) 预测最后结果 然后循环数组每次对比是否有这个最后结果 有则返回 无则继续对比
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
  let res = undefined;
  for (let i = 0; i < nums.length; i++) {
    res = target - nums[i];
    for (let j = i + 1; j < nums.length; j++) {
      if (nums[j] == res) {
        return [i, j];
      }
    }
  }
};

从下面的执行用时和内存消耗可以看出 时间较长 但内存消耗较少

  • 空间置换时间 想要时间 一遍哈希表
    空间最差解法 每次用目标值target 数组中的值(从数组下标0开始) 预测最后结果 先判断新建的对象中是否存在最后结果 有则返回 无则将值添加至对象中继续比对
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
  let res = undefined;
  let obj = {};
  let arr = [];
  for (let i = 0; i < nums.length; i++) {
    res = target - nums[i];
    if (res in obj) {
      arr.push(obj[res], i);
      return arr;
    }
    obj[nums[i]] = i;
  }
};

从下面的执行用时和内存消耗可以看出 时间较短 但内存消耗较多

从此题引升到前端思路

思考懒加载和预加载

  • 懒加载
    时间置换空间 可能随着滚动条的滚动 会重新加载当前所需的图片 可能优先加载较小的图片 按需加载 减少了加载页面时候的内存占用 将需要执行的时间滞后
  • 预加载
    空间置换时间 在加载的时候 会加载当前所需的图片资源和可能后面所需的图片资源 增加了空间内存的大小 但减少了后续使用所需的图片的时间
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容