JS算法题

求字符串出现次数最多字符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
};

posted @ 2021-04-11 21:39  abcdefgab  阅读(86)  评论(0)    收藏  举报