![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
算法
和瑚
这个作者很懒,什么都没留下…
展开
-
【算法】数组中的重复数字问题
以第三题,错误的集合为例对于这样的问题,有很简单的解决方式,先遍历一次数组,用一个记录每个数字出现的次数,然后遍历一次 [1…N],看看那个元素重复出现,那个元素没有出现,就 OK 了。但问题是,这个常规解法需要一个哈希表,也就是 O(N) 的空间复杂度。你看题目给的条件那么巧,在 [1…N] 的几个数字中恰好有一个重复,一个缺失O(N) 的时间复杂度遍历数组是无法避免的,所以我们可以想想办法如何降低空间复杂度,是否可以在 O(1) 的空间复杂度之下找到重复和缺失的元素呢?原创 2023-02-19 13:04:03 · 359 阅读 · 0 评论 -
【算法】手写单例模式 LRU 死锁 快排
使用LinkedHashMap。双重检查锁(DCL)原创 2023-01-31 14:54:51 · 77 阅读 · 0 评论 -
【算法】回溯解决排列、组合、子集问题
子集问题力扣78——子集元素无重复,不可以重复选res,trackbacktrack函数用start标识初时位置防止复选basecase无脑加入res就可力扣77——组合元素无重复,不可以复选res,trackbacktrack函数用start标识初时位置防止复选,start初始用1basecase如果track.size()=k,加入res力扣46——全排列元素无重复,不可以复选res,track,usedbacktrack函数basecase如果track.size(原创 2022-05-12 15:55:27 · 96 阅读 · 0 评论 -
【算法】基础算法——排序
1、快排复杂度O(nlogn)不稳定思路是通过一趟排序将数组分为两部分,其中一部分的所有数比另一部分的所有数都小,再递归对这两部分进行排序,达到全部排序的目的一趟排序具体过程是从待排序列中任意选取一个记录(通常选取第一个记录)作为基准值,然后将比它小的值都放在它的位置之前,将比它大的都放在它的位置之后。这样,以该基准值为分界线,将待排序列分成的两个子序列一趟排序的具体做法:设置两个指针low和high分别指向待排序列的开始和结尾,记录下基准值baseval(待排序列的第一个记录),然后先从hig原创 2022-04-29 13:13:38 · 65 阅读 · 0 评论 -
【算法】基础算法——排序(基础篇)
1、冒泡排序复杂度O(n^2)稳定,因为当相邻两个数字相同的时候,不会交换它们思路就是每次将无序部分的最大的数沉到最后面public void bubble(int[] nums){ for (int i = 0;i < nums.length;i++){ //一共要沉多少次 for (int j = 0;j < nums.length-i-1;j++){ //每次沉的时候,后面的值已经排好了不需要再比原创 2022-04-27 16:19:47 · 177 阅读 · 0 评论