力扣基础算法(1)

发布于:2022-12-29 ⋅ 阅读:(232) ⋅ 点赞:(0)

目录

1. 题目:一维数组动态和

解决方法

1.第一种方法

2.第二种方法

2. 题目:赎金信

解决方法 

总结



1. 题目:一维数组动态和

给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。

请返回 nums 的动态和。


示例 1:

输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。

解决方法

1.第一种方法

思路:改变原有数组中的元素,所以第一个元素可以不计算。从第二个元素开始,依次计算与前一个元素相加。[1,2,3,4]=>[1,3,6,10]。

代码如下(示例):

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var runningSum = function(nums) {
     if(nums&&nums.length==0) return []
     for(let i=1;i<nums.length;i++){
         nums[i]+=nums[i-1]
     }
     return nums
};

2.第二种方法

思路:首先遍历所有元素,然后计算当前元素前边的所有值,存入数组。返回新数组。

        【1,2,3,4】=> 【1,2+1,3+2+1,4+3+2+1】

代码如下(示例):

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var runningSum = function(nums) {
    let stack=[]
    for(let i=0;i<nums.length;i++){
        let j = i,sum=0
        // 计算前i个数的和,存入数组中
        while(j>=0){
            sum+=nums[j]
            j--
        }
        stack.push(sum)
    }

        return stack
};

2. 题目:赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

解决方法 

思路:遍历第一个字符串,用每个元素,在另一个字符串中查找,如果找到就删除此元素,否则返回false。记录找到元素的个数,判断第一个字符串的长度是否和记录的数相同。

代码如下:

/**
 * @param {string} ransomNote
 * @param {string} magazine
 * @return {boolean}
 */
var canConstruct = function(ransomNote, magazine) {
    let j=0
    for(let i=0;i<ransomNote.length;i++){
        let index = magazine.indexOf(ransomNote[i])
        if(index>-1){
          magazine =  magazine.replace(magazine[index],'')
            j++
        }else{
            return false
        }
    }
    return j==ransomNote.length

};

3.题目:Fizz,Buzz

给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。
answer[i] == "Fizz" 如果 i 是 3 的倍数。
answer[i] == "Buzz" 如果 i 是 5 的倍数。
answer[i] == i (以字符串形式)如果上述条件全不满足。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fizz-buzz
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决方法: 

/**
 * @param {number} n
 * @return {string[]}
 */
var fizzBuzz = function(n) {
    let stack=[]
    for(let i=1;i<=n;i++){
        if(i%3==0&&i%5==0){
            stack[i]='FizzBuzz'
        }else{
            if(i%3==0){
                stack[i]='Fizz'
            }else if(i%5==0){
                stack[i]='Buzz'
            }else{
                stack[i]=`${i}`
            }
        }
    }
    stack.splice(0,1)
    return stack
};

总结

算法很灵活,根据自己的思路一点点摸索吧,我也刚开始学算法。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到