求字符串出现次数最多字符3
let str = "aaabbccccddddd"
function longSre(str) {
let zifu;
let max = 0;
let arr = str.split('')
let map = new Map()
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
let num = map.get(arr[i]) + 1
map.set(arr[i], num)
} else {
map.set(arr[i], 1)
}
}
for (let item of map.keys()) {
if (map.get(item) > max) {
zifu = item
max = map.get(item)
}
}
console.log(zifu)
console.log(max)
}
longSre(str)
两数之和1
ES6新特性
var twoSum = function(nums, target) {
let map=new Map()
for(let i=0;i<nums.length;i++){
let dif=target-nums[i]
if(map.has(dif)){
return [map.get(dif),i]
}else{
map.set(nums[i],i)
}
}
};
比较原生的写法
var twoSum = function(nums, target) {
let resobj={}
for(let i=0;i<nums.length;i++){
if(resobj[target-nums[i]]===undefined){
resobj[nums[i]]=i
}else{
return [resobj[target-nums[i]],i]
}
}
};
斐波那契数列509
let num = 9
let res = []
for (let i = 0; i < num; i++) {
if (i <= 1) {
res.push(i)
} else {
res.push(res[i - 1] + res[i - 2])
}
}
console.log(res)
洗牌算法
let arr = [1,2,3,4,5] // 需要打乱的数组
let shuffle = function(arr) {
let result = new Array(), randomIndex;
// 条件判断,只要arr.length > 0 就走while循环里面的
while(arr.length > 0) {
/*
Math.random() 0 - 1
arr.length n
Math.random() * arr.length 0 - n(但是不等于5)
结果: 0 - (n-1)
*/
randomIndex = Math.floor(Math.random() * arr.length) // 得到数组范围内下标
result.push(arr[randomIndex])
arr.splice(randomIndex, 1)
}
return result;
}
console.log(shuffle(arr))
两数相加2
var addTwoNumbers = function(l1, l2) {
let dummy =new ListNode(0);
let curr=dummy
let carry=0
while(l1!=null || l2!=null){
let sum = 0
if(l1!=null){
sum+=l1.val
l1=l1.next
}
if(l2!=null){
sum+=l2.val
l2=l2.next
}
sum+=carry
curr.next=new ListNode(sum%10)
carry=Math.floor(sum/10)
curr=curr.next
}
if(carry>0){
curr.next=new ListNode(carry)
}
return dummy.next
};
爬楼梯70
var climbStairs = function(n) {
if(n<=1){
return n;
}
let opt0=1
let opt1=1
for(let i=2;i<=n;i++){
const temp=opt0
opt0=opt1
opt1=opt1+temp
}
return opt1
};
打家劫舍198
var rob = function(nums) {
if(nums.length===0){return 0}
let dp=[0,nums[0]]
for(let i=2;i<=nums.length;i++){
dp[i]=Math.max(dp[i-2]+nums[i-1],dp[i-1])
}
return dp.pop()
}
猜数字大小374
var guessNumber = function(n) {
const rec=(low,high)=>{
if(low>high){return;}
const mid=Math.floor((low + high) / 2)
const res=guess(mid)
if(res===0){return mid}
if(res===1){
return rec(mid+1,high)
}
if(res===-1){
return rec(1,mid-1)
}
}
return rec(1,n)
};
翻转二叉树226
var invertTree = function(root) {
if(!root){return null}
return {
val:root.val,
left:invertTree(root.right),
right:invertTree(root.left)
}
};
相同的树100
var isSameTree = function(p, q) {
if(!p&&!q) return true
if(p&&q&&p.val===q.val&&isSameTree(p.left,q.left)&&isSameTree(p.right,q.right)){
return true
}
return false
};
对称二叉树101
var isSymmetric = function(root) {
if(!root){return true}
const isMirror=(l,r)=>{
if(!l&&!r){return true}
if(l&&r&&l.val===r.val&&isMirror(l.left,r.right)&&isMirror(l.right,r.left)){
return true
}
return false
}
return isMirror(root.left,root.right)
};
分发饼干455
var findContentChildren = function(g, s) {
g.sort((a,b)=>{return a-b})
s.sort((a,b)=>{return a-b})
let init=g[0]
let i=0
s.forEach(item=>{
if(item>=g[i]){
i++
}
})
return i
};
买卖股票的最佳时机 II 122
var maxProfit = function(prices) {
let profit=0
for(let i=1;i<prices.length;i++){
if(prices[i]>prices[i-1]){
profit+=prices[i]-prices[i-1]
}
}
return profit
};
全排列46
var permute = function(nums) {
let res=[]
const sonarr=(docker)=>{
if(docker.length===nums.length) {
res.push(docker)
return
}
nums.forEach(item=>{
if(docker.includes(item)){return;}
sonarr(docker.concat(item))
})
}
sonarr([])
return res
};
子集78
var subsets = function(nums) {
const res=[]
const backtrack=(path,l,start)=>{
if(path.length===l){
res.push(path)
return
}
for(let i=start;i<nums.length;i++){
backtrack(path.concat(nums[i]),l,i+1)
}
}
for(let i=0;i<=nums.length;i++){
backtrack([],i,0)
}
return res
};
合并两个有序列表21
var mergeTwoLists = function(l1, l2) {
let res=new ListNode(0)
let p=res
let p1=l1
let p2=l2
while(p1&&p2){
if(p1.val<p2.val){
p.next=p1
p1=p1.next
}else{
p.next=p2
p2=p2.next
}
p=p.next
}
if(p1){
p.next=p1
}
if(p2){
p.next=p2
}
return res.next
};
二叉树最大深度104
var maxDepth = function(root) {
if(!root) return 0
let res=0
const rec=(p,l)=>{
if(!root) return
if(!p.left&&!p.right){
res=Math.max(res,l)
}
if(p.left){rec(p.left,l+1)}
if(p.right){rec(p.right,l+1)}
}
rec(root,1)
return res
};