自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 Advantage Shuffle 优势洗牌解析以及java实现

Advantage Shuffle 优势洗牌解析以及java实现 这一题给我们长度相等的两个数组A和B,要求我们返回一个数组,重新排列A,使得A中尽可能多的元素比相同位置上的B的元素要大。 这一题应该是比较明显的要使用贪心算法来解决的,贪心算法只是一个思维,但是具体实现起来是比较难的。让我们明确一下解题思路,其实这一题和田忌赛马很像,如果当前的A中能找到比B[i]大的数字,则我们用比B[I]大的数字中最小的那个与之对应,如果没有则用A中没有用过的最小的数字与之对应。 我们首先将A排序,然后用一个大堆来保存一

2021-03-24 22:32:14 171

原创 923. 3Sum With Multiplicity 三数之和的排列组合解析以及java实现

923. 3Sum With Multiplicity 三数之和的排列组合 这一题和3Sum其实有点类似,作为一道衍生题,这一道题目允许出现重复的数字,但是要求index i,j,k需要是i<j<k的顺序。我们解题思路同样也是用哈希表来存储一个数字和出现次数的映射,分别用a,b来遍历哈希表,因为C可以通过target-a-b来得到。如果C不存在,则该组合不存在可以直接跳过。如果C存在,则分为三种情况,A = B = C, A = B != C, A != B != C. 这三种情况分别对应三种不

2021-03-24 12:58:55 210

原创 438. Find All Anagrams in a String 寻找字符串种所有的同位串

438. Find All Anagrams in a String 寻找字符串种所有的同位串 先说一下题意,给一个字符串S,和一个模式串P,要求找到所有的P的同位串(Anagram)在S种的起始Index,Anagram的意思就是组成字符相同的字符串。这一道题有很多的解法,有一些时间复杂度比较高,这里我们就不多赘述了,就讲一种比较简单,代码量也不大而且时间复杂度为O(N)的解法。 这一种方法主要是使用了滑动窗口和一个字符哈希数组来解决。 主要思维为: 1.新建一个256的数组用来存放当前窗口内所有的字符的

2021-03-23 21:48:56 246

原创 Check If a String Contains All Binary Codes of Size K 检查当前字符串是否包含了所有的K位二进制的数字

Check If a String Contains All Binary Codes of Size K 检查当前字符串是否包含了所有的K位二进制的数字 拆解一下其实就是问我们,是否所有长度为K的二进制字符串都是S的字串,如果暴力破解显然是不行的明显会超时。于是我们换一种思维来看,长度为K的二进制的字符串一共又多少个?其实也就是包括0的话,一共有二进制所代表的最大值的+1个。如果K=2的话,则有00, 01,10,11 代表了从0到长度为K的二进制能表示的最大个数。K= 3的话则有000,001,010,

2021-03-12 23:40:54 124

原创 239. Sliding Window Maximum 滑动窗口最大值

239. Sliding Window Maximum 滑动窗口最大值 这一题也是滑动窗口类型的题目,严格来说比上一篇的滑动窗口中位数要来的简单,滑动窗口中位数则需要两个堆来解决,而这一次我们只需要用一个双向队列即可。 在这个队列中我们存储的并不是数组中的值,而是存储的值的索引,在向双向队列尾部添加索引的时候,要将队列中所有比该索引对应的值小的缩影都移除,这样就可以保证队列的前端永远是该滑动窗口中的最大值。来让我们看看代码吧 class Solution { public int[] maxSlid

2021-03-12 04:50:44 232

原创 Leetcode Sliding Window Median 滑动窗口中位数实现与解析

480. Sliding Window Median 今天这道题是一道Hard的题目,给定一个特定大小的滑动窗口以及一个数组,每一次向后滑动一个位置,要求返回一个有着所有的中位数的数组。 我们维护两个堆来解决这个问题,一个大堆一个小堆,我们保证当K为奇数的时候中位数是大堆顶端的数字,当K为偶数的时候,中位数则是大堆顶端和小堆顶端的数字和除以2. 我们在向堆内添加和删除数字的时候都要尽量保持两个堆的大小相等或者相差不大于1。 在向堆内添加数字的时候,如果当前的数字比大堆顶部的数字要小则将其加入大堆中,如果比大

2021-03-12 04:14:14 266

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除