目录
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
};
总结
算法很灵活,根据自己的思路一点点摸索吧,我也刚开始学算法。