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;
};