力扣小练习(JavaScript)

42dp

https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/submissions/

var maxSubArray = function(nums) {
    var max=nums[0];
    //dp[i]代表以元素为nums[i]为结尾的连续子数组最大和
    var dp=new Array();
    dp[0]=nums[0];
    for(let i=1;i<nums.length;i++){
        dp[i]=Math.max(dp[i-1],0)+nums[i];
        max=Math.max(max,dp[i]);
    }
    return max;
};

快速排序

https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/
QuickSort(对冒泡排序的一种改进):
排序过程只需要三步:
(1)在数据集之中,选择一个元素作为"基准"(pivot)。
(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
其中遇到问题:

遇到Uncaught RangeError: Maximum call stack size exceeded,查了一下,
这个就是“最大堆栈超过了最大值”,一般这种错误也是在递归函数当中出现
var getLeastNumbers = function(arr, k) {
        //1,利用快速排序先对数组进行排序
        var newArr=quickSort(arr);
        //2,对数组进行截取
        return newArr.slice(0, k);
};
//1,利用快速排序先对数组进行排序
    var quickSort=function(arr){
        if (arr.length <= 1) { return arr; }

        var pivotIndex = Math.floor(arr.length / 2);
        var pivot = arr.splice(pivotIndex, 1)[0];
        var left=[];
        var right=[];
        for(let i=0;i<arr.length;i++){
            if(arr[i]<pivot){
                left.push(arr[i]);
            }else{
                right.push(arr[i]);
            }
        }
        //最后,使用递归不断重复这个过程,就可以得到排序后的数组
        return quickSort(left).concat([pivot],quickSort(right));
    };

sort:
在这里插入图片描述

Arrays.sort(arr, (a, b) => a - b)
Arrays.sort(arr,Comparator<>)
对数组中相邻的两个数进行比较
一轮完了接着二轮 是一个冒泡排序

(a, b) => a - b 相当于
function(a,b){
return a-b;
}
相当于Comparator<>

var getLeastNumbers = function(arr, k) {
if(arr.length<k) return arr;
arr.sort((a,b)=>a-b);
return arr.slice(0, k);
};

14贪心算法

https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/submissions/

var cuttingRope = function(n) {
     //贪心算法
    //最优:3.把绳子尽可能切为多个长度为 3的片段,留下的最后一段绳子的长度可能为0,1,2 三种情况。
    if(n==2) return 1;
    if(n==3) return 2;
    let result=1;
    while(n>4){
        n-=3;
        result=(result*3)%1000000007;
    }
    //最后只剩下2,3,4这几种情况
    return result*n%1000000007;
};

14合并两个有序链表

var mergeTwoLists = function(l1, l2) {
    //将l1和l2中的数据取出加入到result中
    var node=new ListNode(-1);
    var result=node;
    while(l1!=null&&l2!=null){
        if(l1.val<=l2.val){
            result.next=l1;
            l1=l1.next;
        }else{
            result.next=l2;
            l2=l2.next;
        }
        result=result.next;
    }
    //将链表加完之后,最多还有一个链表剩一个节点
    result.next=l1==null?l2:l1;
    return node.next;
};

一级目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值