leetcode-数组-续

第一章 数组



前言

以下解答非最优解


一、简单集合

将有序数组转换为二叉搜索树

题目

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
链接: 将有序数组转换为二叉搜索树

解答

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
var sortedArrayToBST = function(nums) {
    return helper(nums,0,nums.length-1);
};

const helper = (nums,left,right)=>{
    if(left>right){
        return null
    }
    let mid = Math.floor((left +  right)/2)
    var root = new TreeNode(nums[mid])
    root.left = helper(nums,left,mid - 1)
    root.right = helper(nums,mid+1,right)
    return root
}

杨辉三角

题目

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
链接: 杨辉三角

解答

/**
 * @param {number} numRows
 * @return {number[][]}
 */
var generate = function(numRows) {
    let set = []
    for(let i =0;i<numRows;i++){
        let arr = new Array(i+1).fill(1);
        for(let j = 1;j<arr.length;j++){
            arr[j] = (set[i-1][j-1]?set[i-1][j-1]:0) + (set[i-1][j]?set[i-1][j]:0);
        }
        set.push(arr)
    }
    return set
};


杨辉三角 II

题目

输入: rowIndex = 3
输出: [1,3,3,1]
链接: 杨辉三角 II

解答

/**
 * @param {number} rowIndex
 * @return {number[]}
 */
var getRow = function(rowIndex) {
    let set = []
    for(let i=0;i<=rowIndex;i++){
        let arr = new Array(i+1).fill(1)
        for(let j=1;j<arr.length;j++){
            arr[j] = (set[i-1][j-1]?set[i-1][j-1]:0) + (set[i-1][j]?set[i-1][j]:0)
        }
        set.push(arr)
    }
    return set[rowIndex]
};

买卖股票的最佳时机

题目

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
链接: 买卖股票的最佳时机

解答

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let mini = prices[0]
    let max = 0
    for(let i=0;i<prices.length;i++){
        if(prices[i] < mini){
            mini = prices[i]
        }
        if(prices[i]-mini > max){
            max = prices[i]-mini
        }
    }
    return max
};

只出现一次的数字

题目

输入: [2,2,1]
输出: 1
链接: 只出现一次的数字

解答

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    return nums.reduce((pre,now)=>{
        return pre^now
    })
};

多数元素

题目

输入:nums = [3,2,3]
输出:3
链接: 多数元素

解答

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    let obj = {}
    nums.forEach((es)=>{
        if(obj[es]){
            obj[es] += 1
        }else{
            obj[es] = 1
        }
    })
    let num = 0
    let val = 0
    let arrVal = Object.values(obj)
    let arrKey = Object.keys(obj)
    for(let i = 0;i< arrVal.length;i++){
        if(arrVal[i]>val){
            val = arrVal[i]
            num = arrKey[i]
        }
    }

    return num
};

存在重复元素

题目

输入:nums = [1,2,3,1]
输出:true
链接: 存在重复元素

解答

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    let obj = {}
    for(let i = 0;i< nums.length;i++){
        if(obj[nums[i]]){
            return true
        }else{
            obj[nums[i]] = 1
        }
    }
    return false
};

存在重复元素 II

题目

输入:nums = [1,2,3,1], k = 3
输出:true
链接: 存在重复元素 II

解答

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {boolean}
 */
var containsNearbyDuplicate = function(nums, k) {
    const map = new Map();
    const length = nums.length;
    for (let i = 0; i < length; i++) {
        const num = nums[i];
        if (map.has(num) && i - map.get(num) <= k) {
            return true;
        }
        map.set(num, i);
    }
    return false;
};

汇总区间

题目

输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,“4->5”,“7”]
解释:区间范围是:
[0,2] --> “0->2”
[4,5] --> “4->5”
[7,7] --> “7”
链接: 汇总区间

解答

/**
 * @param {number[]} nums
 * @return {string[]}
 */
var summaryRanges = function(nums) {
    let slow = nums[0]
    let arr = [nums[0]]
    let output = []
    for(let i =1;i<nums.length;i++){
        if(nums[i] - slow < 2){
            arr[1] = nums[i]
        }else{
            output.push(arr.join("->"))
            arr[0] = nums[i]
            arr.length = 1
        }
        slow = nums[i]
    }
    if(arr.length == 1 && slow){
        output.push(slow.toString())
    }else if(arr[0] !== undefined){
        output.push(arr.join("->"))
    }
    return output
};


LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值