
算法
文章平均质量分 51
y我见青山多妩媚
我很懒,还没有添加简介
展开
-
单调栈---神奇的栈
首先这肯定是我们要写的,不过中间该怎么写?当然我们可以两个for循环使劲暴力,这个方法往往是很有效的,但是这个题数组的长度是10。),跑一会应该也能过,但是面试的时候面试官就该让你回去等通知了。我们平时用的栈多,但是我们一般用的是什么呢?用来做有效的括号匹配?还是用来记录我们的二叉树的节点?当i=2到i=5时,可以看到里面的变化,不断的将小的出栈,将大的进栈,不断的更新下标的差。这个题目不在详细讲了,上面的单调栈理解之后这个题解也是可以看懂的。那么单调栈有什么作用呢?通过对栈的理解,我们学习一个新的概念–原创 2023-02-16 16:01:59 · 240 阅读 · 0 评论 -
一种很新的求素数的方式
【代码】一种很新的求素数的方式。原创 2023-01-02 16:27:10 · 260 阅读 · 1 评论 -
没有思路的dfs
递归的思想,递归还是很好用的,但是老是想着遍历,害。原创 2023-01-02 16:26:34 · 110 阅读 · 1 评论 -
动态规划是个好东西:编辑距离
这道题正常来说,我们要考虑这个字符怎么换,长度不一怎么找…(因为当最后A[i]=B[j]的时候,是可以不用做操做的)这道题目让我狠狠的了解了动态规划,这玩意是真强。个字符编辑子距离的问题,根据上面的分析,那么。个字符编辑子距离的问题,根据上面的分析,那么。个字符编辑子距离的问题,根据上面的分析,那么。所以从A变成B的编辑距离应该就是。首先我们给定两个字符串A=那么我们定义一个dp数组。原创 2023-01-02 16:26:03 · 364 阅读 · 0 评论 -
双指针:环形链表II
所以我们可以理解为,在t时刻时相遇,那么quickly走过的距离一定是slow走过的距离的二倍。我们回到这个题目上,假设相遇时相遇点距离环起点的距离为m,相遇点距离链表头结点的距离为k,所以有x。这是我们常用的用快慢指针寻找是否有环的方法。由此我们可以引申为,是不是不论什么时候,在v。那么在经历相同时间内运行过的距离,x。答案很明显,是的,所以这道题目。设一开始slow的速度为v。,quickly的速度为v。原创 2023-01-02 16:22:20 · 562 阅读 · 0 评论 -
图的初体验
关于图的题目,基本上的思路就是,首先构造图的相连关系,给的数组表达的不清楚,我们需要清楚的知道,和a相连的都有谁,和b相连的都有谁…等待,如果有路径长度就在后面跟路径长度。先确定连通图//int[][] roads //构造连通图,如果有路径key就用就用List,int[0]为长连通状况,int[1]为路径长 Map < Integer , List < Integer > > map = new HashMap < >();}原创 2023-01-02 16:21:49 · 420 阅读 · 0 评论 -
分治算法:合并K个升序链表
我们这样想,既然是合并k个,那我们两个两个合并不就可以了吗!是的,这道题目的解法就是这样,像这样,我们把一个大的问题,分割成很多个子问题的思想,就是分治,那现在我们知道怎么写了,首先,他的合并方法肯定是上面的方法,关键在于怎么分割成两个两个的呢?那么我们把完整代码写一起,就是这个问题的解了。当然这个问题在题目的题解里有更巧妙的方法求,但是这个题目主要的思想还是分治,当我接触的分治算法初体验了。我们将题目所给的数组拆分,拆分成两个数组,不断的递归,让数组两个两个合并,再返回。合并K个升序链表我们怎么办呢?原创 2022-12-08 21:34:11 · 259 阅读 · 0 评论 -
排序算法:快速排序
快速排序是对冒泡排序的一种改进,他的基本思想是,先找一个基数,以基数为中心,将数组分成左边的数全部小于基数,右边的数全部大于基数。原创 2022-12-08 21:33:26 · 123 阅读 · 0 评论 -
图的初体验
关于图的题目,基本上的思路就是,首先构造图的相连关系,给的数组表达的不清楚,我们需要清楚的知道,和a相连的都有谁,和b相连的都有谁…等待,如果有路径长度就在后面跟路径长度。先确定连通图//int[][] roads //构造连通图,如果有路径key就用就用List,int[0]为长连通状况,int[1]为路径长 Map < Integer , List < Integer > > map = new HashMap < >();}原创 2022-12-08 21:32:33 · 541 阅读 · 0 评论 -
Arrays.sort()根据值大小对索引排序
我们不需要对他本身排序,但是我们想知道他排序之后的索引值怎么办?这时就需要一些骚操作了。该排序方法会根据比较器进行排序,如果没有写比较器,就是默认排序(由低到高)可以看到,此时的索引值如果映射到list内,list就是一个有序的列表。的排序,使用这个api是没有问题的。如果我们现在有个数组。,我们想对该数组进行。原创 2022-12-08 21:32:16 · 414 阅读 · 0 评论 -
滑动窗口:无重复字符的最长子串
该题是一个滑动窗口的题目,可以用传统的方式解决。原创 2022-12-08 21:31:05 · 156 阅读 · 0 评论 -
最小堆模拟
力扣318场周赛第三题,解法优先级队列模拟最小堆。原创 2022-11-13 21:06:30 · 172 阅读 · 0 评论 -
经典动态规划:最长递增子序列
每次处理一张扑克牌不是要找一个合适的牌堆顶来放吗,牌堆顶的牌不是有序吗,这就能用到二分查找了:用二分查找来搜索当前牌应放置的位置。因为10本身是一个,所以是1,9呢又比10小,所以也是1,2比前面的都小,所以也是1,那么5呢?比如说上述的扑克牌最终会被分成这样 5 堆(我们认为纸牌 A 的牌面是最大的,纸牌 2 的牌面是最小的)。,那我们从下标为0的数开始观察,看看有什么规律,为了方便,我们定义一个数组。是什么意思,结合案例我们知道,可以是不连续的,只要大就算。的结果,那么后面的应该是什么呢?原创 2022-11-13 21:05:41 · 1067 阅读 · 1 评论 -
java大顶堆小顶堆使用案例
使用优先级队列实现大小顶堆例题:原题链接另外对于优先级队列的一些问题当优先级队列加入元素时,如果不指定,默认为升序,否则为降序当加入元素之后进行遍历时,优先级队列输出的结果不一定会按顺序排列,但是进行poll操作取出后的元素,都是按顺序排列的,他只会让需要的元素在队列的顶输出结果for循环内加入顺序反过来同理。...原创 2022-06-27 11:11:52 · 555 阅读 · 0 评论 -
算法笔记-归并排序
归并排序采用的是分治(divide-and-conquer)法思想。基本思想是将一个集合递归分成两个集合,对每个集合内的数进行排序,最后再把排好序的集合再次排序先来看归并排序的大致过程,这个是为了方便看,是这样的可以将他的执行过程理解为一颗二叉树,每个数的子节点都是父节点对半分的集合,对每个子节点进行排序之后,再对父节点进行排序以[8,4,5,7,1,3,6,2]为例子运行结果:4、时间复杂度分析......原创 2022-06-23 11:36:14 · 214 阅读 · 0 评论 -
优先级队列
优先级队列队列是一种先进先出的数据结构,这一点刚好和栈相反。但是队列的先进先出是根据顺序来决定出队列的元素,而优先级队列可以做到根据优先级出队列基本介绍优先级队列有两种:PriorityQueue :线程不安全PriorityBlockingQueue:线程安全这里主要介绍PriorityQueue,其中PriorityQueue的底层是堆(以后遇到了再总结),堆的底层是数组。PriorityQueue的构造器:构造器解释说明public PriorityQ原创 2022-04-29 21:22:52 · 773 阅读 · 0 评论 -
回溯算法笔记
回溯算法全排列(无重复元素)字符串的排列(有重复元素)另一种情况的全排列题目描述小红想让你构造一个长度为n的数组,满足以下三个条件:1、该数组最大值不超过k。2.该数组所有数都不相同。3.数组所有数之和等于x.输入描述输入一行三个正整数n,k, x,用空格隔开。1<= n <=10^51<=k <=x <= 10^14输出描述如果无法构造请输出-1否则输出n个数,用空格隔开,代表构造的数组,有多解时输出一种即可示例1输入4 6 15原创 2022-04-16 17:00:53 · 1071 阅读 · 0 评论 -
杂杂杂杂杂
二叉树层序遍历:力扣–二叉树层序遍历原创 2022-03-06 15:43:12 · 290 阅读 · 0 评论 -
单调队列的学习
力扣剑指offer第二版遇到一个滑动窗口的题目:Offer-59-I.滑动窗口我的暴力解法如下:class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length == 0){ return new int[]{}; } int left = 0,right=k-1,count = nums.length -right;原创 2022-03-15 17:37:48 · 412 阅读 · 1 评论 -
String、StringBulider、StringBuffer
一、String、StringBulider、StringBuffer区别1、String(JDK1.0)是不可变字符序列2、StringBuffer(JDK1.0)是可变字符序列,可以对内容进行增删,此时不会产生新的对象,效率低,线程安全StringBuffer有三个构造器StringBuffer(); //初始容量为16的字符串缓冲区StringBuffer(int size); //构造指定的初始容量StirngBuffer(String str); //将内容初始化为指定的字符串原创 2022-01-27 15:35:02 · 815 阅读 · 0 评论 -
java使用数组做字典案例
java使用数组做字典案例今天刷力扣签到题的时候看到了这个题,自己提交的不是太满意,就去看了看题解大佬们用的方法,然后就翻到了这么一个方法,觉得挺有意思的,值得去记录下来题目描述:为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false 。magazine 中的每个字原创 2021-12-04 13:20:41 · 689 阅读 · 0 评论 -
o~n-1中缺失的数字--一个简单的二分查找
题目如下题目有很多种解法,记录一下常规的两种解法。第一种暴力破解,代码如下:class Solution { public int missingNumber(int[] nums) { int j = 0; for(int i = 0; i<nums.length;i++){ j++; if(nums[i]!=i){ return i; }原创 2022-01-12 20:37:22 · 301 阅读 · 0 评论 -
股票最大利润--一个简单的动态规划
先看题目点击查看题目来源这个题目有两种解法1、暴力法public class Solution { public int maxProfit(int prices[]) { int length = prices.length; int max = 0; for (int i = 0; i < length ; i++) { for (int j = i ; j < length ; j++) {原创 2022-01-11 09:32:40 · 390 阅读 · 0 评论 -
斐波那契的简单递归思想和常规思想
1、简单递归思想class Solution { public int fib(int n) { int num = 0; for(int i =0;i<=n;i++){ num = fin(i); } return num ; } public static int fin(int number){ if(number == 0 || number == 1 ){原创 2022-01-10 10:14:26 · 224 阅读 · 0 评论