JS算法练习题(附带答案)- 1

462 阅读2分钟

_此文章中的算法题目均来自 力扣(LeetCode)

链接:leetcode-cn.com/problems/ad…

_

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

解答:

/** 
    * @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] + nums[i] === target) {                
            return [i, j]            
        }        
    }    
}};

2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

**
**

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

解答:

/** 
    * Definition for singly-linked list. 
    * function ListNode(val, next) { 
    *     this.val = (val===undefined ? 0 : val) 
    *     this.next = (next===undefined ? null : next) 
    * } 
    */
/** 
    * @param {ListNode} l1 
    * @param {ListNode} l2 
    * @return {ListNode} 
    */
var addTwoNumbers = function(l1, l2) {    
    l1 = (l1.reverse().join('')) * 1    
    l2 = (l2.reverse().join('')) * 1    
    return String(l1 + l2).split('').reverse()
};

不知道为什么,在力扣网上提交会报错,reserve is not a function,但是私下验证并没有问题

3. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

示例 4:

输入: s = ""
输出: 0

解答:

/** 
    * @param {string} s 
    * @return {number} 
    */
var lengthOfLongestSubstring = function (s) {    
    var map = [];    
    var resultLen = 0;    
    for (var i = 0; i < s.length; i++) {        
        var el = s[i];        
        if (map.length === 0) {            
            map[0] = el        
        } else {            
            var index = map[map.length - 1] ? map[map.length - 1].indexOf(el) : -1; 
            if (index === -1) {                
                map[map.length - 1] = map[map.length - 1] ? map[map.length - 1] + el : el;
            } else { 
                map[map.length] = map[map.length - 1].slice(index + 1, map[map.length - 1].length) + el;
            }        
        }    
    }    
    for (var i = 0; i < map.length; i++) {        
        var el = map[i];        
        if (el.length > resultLen) {            
            resultLen = el.length;        
        }    
    }    
    return resultLen;
};

如有疑问,欢迎留言。

本人也会不定期的更新一些其他的前端干货,或者此类的算法联系,欢迎各位点赞、关注、留言。谢谢观看!!!