一个有趣的算法题

原创
小哥 3年前 (2022-11-16) 阅读数 94 #大杂烩

没有算法,没有前端 前端访谈中常见数据结构和算法的总结
winter wang 2018-09-26 16:51:43

前端算法收集优先 目录结构

0.没有算法,没有前端 前端访谈中常见数据结构和算法的总结
    1.写在卷首
    2.开发工具
    3.算法题目-->两数之和
        3.1标题描述:
        3.2示例:
        3.3我的答案:
            3.3.1结果分析
        3.4执行时间为68ms的范例:
            3.4.1解法分析
    4.说明

0.没有算法,没有前端 前端访谈中常见数据结构和算法的总结

第一系列前端算法集合
2018.09.26
版权声明:本文为 winter wang 原创文章,转载请注明出处。
如果您有任何问题,请联系我:my csdn blog 我愿意为你回答。

1.写在卷首

作为前端开发人员,虽然你不会遇到像后端这样的数据结构和算法的很多问题,但作为程序员,你不可避免地会遇到一些更复杂的问题。此时,您会发现数据结构和算法非常简单 斗鸡士 几分钟帮助你走上人生巅峰,轻松助你获胜。 BAT 大厂的 offer

随着前端技术的快速发展,你认为这只是一个计划、布局和特效吗?那么你错了,angular, react和vue 随着优秀前端框架的出现,我们不必像以前那样痛苦地操作。 dom 了,但更多的交互和数据处理、微信小程序、数据可视化、,node服务端和其他新兴领域,毫无疑问,前端开发人员提出了更高的要求,并且在。 数据结构和算法 要求更为严格。

于是,我从前端小白入手,通过查阅相关书籍来做到。 LeetCode 算法问题,请看数据结构和算法相关书籍,这里推荐“数据结构与算法”JavaScript描述和学习JavaScript像《数据结构与算法第二版》这样的书,我个人觉得它们受益匪浅。

在这里,我总结了书中和实践中的经验和教训。每个算法问题都有自己的实践经验和相对较好的解决方案。它强调实践、多角度、多思维、梳理和总结。请大力支持。非常感谢。

2.开发工具

推荐使用 vs code 轻量级代码编辑器
3.算法标题->两数之和

难度: 简单
通过率 42.2%

3.1标题描述:

给定一个整数数组和一个目标值,找出数组中的两个数字和目标值。
您可以假设每个输入只对应一个答案,并且不能重用相同的元素。

3.2示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
问题的意思应该是第一次返回两个数字之和的索引,并且只返回一个结果。

3.3我的答案:

/**

  • @param {number[]} nums
  • @param {number} target
  • @return {number[]}
    */
    var twoSum = function(nums, target) {
    for(var i=0; i<nums.length; i++){
    for(var j=i+1; j<nums.length; j++){
    if(nums[j] === target - nums[i]){
    return [i, j];
    }
    }
    }
    };

3.3.1结果分析

执行时:300ms
战胜 17.19% 的 JavaScript 提交记录
时间复杂性:O(n2)对于每个元素,我们尝试通过遍历数组的其余部分来找到其对应的目标元素,这将花费大量的时间。 O(n) 时间因此,时间复杂性为O (n2)。
空间复杂性:O(1)。
用了两层 for 循环、时间复杂度高、代码执行效率低

3.4执行时间为68ms的范例:

/**

  • @param {number[]} nums
  • @param {number} target
  • @return {number[]}
    */
    var twoSum = function (nums, target) {
    var l = nums.length;
    var n = {};
    for(var k=0; k<nums.length; k++){
    n[nums[k]] = k;
    }
    for (var i = 0; i < l; ++i) {
    var value = target - nums[i];
    if (n[value] && n[value] !== i) {
    return [i, n[value]];
    }
    }
    return [];
    };

3.4.1解法分析

执行时:68ms
战胜 98% 的 JavaScript 提交记录
使用对象的特性。,将数组的值作为对象。key,数组的索引是一个对象。value,首先循环对象的key和value赋值(n[value]通过value 来找key),然后判断,targe-nums数组中每个项的结果是否存在于对象中,如果存在,并且索引本身不存在(为了防止相同的数字相加相等target),则返回其索引,否则返回空数组。

避免暴力的方法更受尊重。

版权声明:本文为CSDN博主「winter wang“原创文章,请关注。CC 4.0 BY-SA版权协议,转载请附上原始来源链接和本声明。
原始链接:https://blog.csdn.net/wjd36068407/article/details/82855802

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除