824. 山羊拉丁文
var toGoatLatin = function(sentence) {
//建立res数组,遍历每个单词,依此把修改完的字符串放到数组中,返回
let res=[]
let letters=['a','e','i','o','u']
let s=sentence.split(' ')
for(let i=0;i<s.length;i++){
if(letters.indexOf(s[i][0].toLowerCase())!==-1){
res.push(s[i]+'ma'+'a'.repeat(i+1))
}
else{
res.push(s[i].slice(1,s[i].length)+s[i][0]+'ma'+'a'.repeat(i+1))
}
}
return res.join(' ')
};
贪心:由每一阶段的局部最优,推出整体最优
解题步骤:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
455. 分发饼干
var findContentChildren = function(g, s) {
//先排序,满足s,g中递增,然后双指针,优先满足胃口大的孩子
let res=0
let m=s.length-1
s.sort((a,b)=>a-b)
g.sort((a,b)=>a-b)
for(let i=g.length-1;i>=0;i--){
if(s[m]>=g[i]){
res++
m--
}
}
return res
};
53. 最大子数组和
var maxSubArray = function(nums) {
//遍历,大于res则更新,小于0则重新计数
let res=-Infinity
let sum=0
for(let i=0;i<nums.length;i++){
sum=sum+nums[i]
if(sum>res){
res=sum
}
if(sum<0){
sum=0
}
}
return res
};
122. 买卖股票的最佳时机 II
var maxProfit = function(prices) {
//在同一天,既可以卖出,也可以买入,只要递增,就能获得这天的收益
let res=0
for(let i=1;i<prices.length;i++){
if(prices[i]>prices[i-1]){
res+=prices[i]-prices[i-1]
}
}
return res
};
55. 跳跃游戏
var canJump = function(nums) {
//每到一个位置,存储最大可达位置
if(nums.length===1)return true
let s=nums[0]
for(let i=1;i<nums.length;i++){
if(i<=s){
//说明i可达
s=s<i+nums[i]?i+nums[i]:s
}
if(s>=nums.length-1){
return true
}
}
return false
};
45. 跳跃游戏 II
var jump = function(nums) {
//到达最远能到的边界后才需要跳
let max=0,end=0,step=0
for(let i=0;i<nums.length-1;i++){
max=Math.max(max,i+nums[i])
if(i===end){
step++
end=max
}
}
return step
};