算法
文章平均质量分 55
不为霜停
学如逆水行舟,不进则退
展开
-
贪心,动态规划的区别
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。原创 2022-12-06 15:34:36 · 421 阅读 · 0 评论 -
盛最多水的容器,三数之和 ,有效的括号
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。: 从左右两边开始计算面积,底边长在求解的过程中逐渐减小,所以应用来寻找较长的范围,从而获得较大的面积。因此当左值较小时,左指针增加,右值较小时,右指针减小。 三数之和: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]]原创 2022-12-03 14:22:36 · 169 阅读 · 0 评论 -
最长回文子串
注意: 要同时考虑字符串为奇数,和字符串为偶数的情况,但不论是奇数还是偶数,都进行revert(i,i)和revert(i,i+1),因为我们需要只是最大回文子串。lastIndexOf:从尾开始查找,找到返回索引,找不到返回-1。indexOf: 从头开始查找,找到返回索引,找不到返回-1。原创 2022-11-30 20:45:53 · 351 阅读 · 0 评论 -
无重复字符的最长子串
其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!使用滑动窗口的思想,在只需要遍历一次字符串的情况下,利用滑动窗口找出最长的子串。我们只要把队列的左边的元素移出就行了,直到满足题目要求!一直维持这样的队列,找出队列出现最长的长度时候,求出解!原创 2022-11-30 16:25:55 · 61 阅读 · 0 评论 -
js实现二分法 ,什么题目可以使用二分法
一. 先用js实现二分法 , 用二分法查找有序数组中的目标target 数组: [1,2,3,4,5,6,7,8,9,10] target : 9 使用二分法查找数组中的 9 ,返回找到的下标 , 没有则返回-1 计算的时候有个小坑 ,js使用 /的时候是会保留小数的 , 所以要用Math.floor取整 或者使用位运算>>1 没什么好讲的 , 这个模板就算你不会都要背下来 var search = function(nums,target){ let left = 0原创 2022-04-19 21:04:17 · 369 阅读 · 0 评论 -
js实现堆 大根堆排序 小根堆排序
首先我的得到的是一个无序数组 , 要先将其构造成最大堆 , 再用堆排序得到有序的数组 无序的数组 : num = [1, 6, 12, 4, 5, 7, 8, 8, 9, 10, 0] 构造最大堆 : heap = [12, 10, 8, 9, 6, 7, 1, 8, 4, 5, 0] 使用堆排序 : num = [0, 1, 4, 5, 6, 7, 8, 8, 9, 10, 12] 构造最大堆的实现方法: 使父节点不断下沉 , 找到比父节点大的子节点 , 交换它们的位置 , 直到到达叶节点( 没有子节点原创 2022-04-18 17:12:58 · 1093 阅读 · 0 评论 -
排序算法总结 冒泡排序 堆排序 快排 归并...
一 . 冒泡排序 二 . 快排 三 . 插入排序 package class01; //插入排序: 保证第一层循环i前面的元素全部都是有序的排序 public class sort_charu { public static void charusort(int[] arr) { if(arr.length<2||arr==null)return; for(int i = 1;i<arr.length;i++) { for(int j = i-1;j>=0&原创 2022-04-16 15:59:32 · 696 阅读 · 0 评论 -
力扣算法从小白开始
FindIndex 找到数组中的第一个目标值并且返回目标值的下标 , 没有找到就返回-1 判断后返回值,不用手动return const index = nums.findIndex(item=>item===target) find 找到数组中第一个符合条件的值 , 没有找到就返回 undefined find对空数组不起作用 ...原创 2022-03-09 12:50:00 · 4460 阅读 · 0 评论 -
js 异或运算^
找出arr数组中 出现次数 为奇数次的数 , 有两种奇数的数 let arr = [4,1,2,2,3,1,4,5] //如果只有一个出现次数是奇数的数的话 , 我们只需要对整个数组进行异或运算 , 算出来的结果就是奇数 //如果有两个出现次数是奇数的数的话 , 我们就需要先对整个数组进行异或运算 , //根据运算结果把元素组分成两个部分 , 然后再依次进行异或运算 let arr = [4,1,2,2,3,1,4,5] //进行异或运算的函数 let findLostNum = (arr)=>{原创 2022-04-10 11:00:08 · 5501 阅读 · 0 评论 -
js 实现动态规划
js实现动态规划 , 优化时间 , 优化空间 详情见小灰的算法之旅 , 以下是我个人的见解 题目: 很久很久以前,有一位国王拥有5座金矿,每座金矿的黄金储量不同, 需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需 要5个工人来挖掘;有的金矿储量是200kg黄金,需要3个工人来挖 掘…… 如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能 派出一半人挖取一半的金矿。要求用程序求出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 一开始的思路: 首先我们想到的是 : 求出每个原创 2022-04-09 15:26:49 · 1778 阅读 · 0 评论 -
js 实现链表 , 并判断链表是否循环 ,循环的长度,循环开始的点
一 . 判断一个链表是否循环 , 使用快慢指针 , 快指针每次都比慢指针多走一步 , 如果在快指针没有走到null并且与慢指针相遇了 , 那么该链表就是循环链表 二 . 计算链表循环部分的长度 , 快慢指针第一次相遇 , 继续走, 当快慢指针第二次相遇的时候 循环的长度 = ( 快慢指针速度差 ) * 前进次数 三 . 计算入环点 , 当快慢指针第一次相遇的时候 , 将其中一个指针置为head , 将两个指针都变为慢指针 , 当两个指针第二次相遇的时候 , 前进的次数就是入环点距离head的距离 //用原创 2022-04-01 20:54:33 · 4960 阅读 · 0 评论