自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【每日三题】2022-4-4 LeetCode 40-42

40.组合总和II思路:与上一题类似,区别在于有重复数字,要考虑去重的情况。去重首先要排序,使重复数字排列在一块。当遇到重复数字时,将它作为一个组合,只可从左边开始选。当这个组合中的前一个数字没有被选择时,这个数字也不能选择。假设有【2,2,2】,我们的只尝试【】,【0】,【0,1】,【0,1,2】这几种情况,去除了【0,2】和【1,2】的情况,因为这两种情况与【0,1】的情况一样,都包含了两个2。递归过程中,若当前位置的元素被选中了,则考虑下一个元素要不要选(不管它是重复的还是不重复的),若当前位置的元

2022-04-05 10:51:10 732

原创 【每日三题】2022-4-3 LeetCode 37-39

37.解数独思路:回溯法。首先遍历数组,保存其中已有的数字信息,这些是不可变的。同时记录需要填写的格子。之后每次从需要填写的格子中拿出一个,尝试填写与现有其他格子不冲突的数字,更新状态,并递归尝试填写下一个格子。当所有格子填写完成时,则找到解。若填写下一个格子时,所有数字均冲突,则说明当前格子填写当前值时无解,继续寻找下一个可能的解。代码:private boolean[][] rows = new boolean[9][9];private boolean[][] cols = new boole

2022-04-04 06:48:45 639

原创 【每日三题】2022-4-2 LeetCode 34-36

34.在排序数组中查找元素的第一个和最后一个位置思路:二分查找。需要两次二分查找,分别找出第一个和最后一个位置。首先,通过二分查找找第一个的位置。判断nums[mid] == target。如果不等于,则说明第一个的位置在mid左侧或者右侧,根据其大小关系移动指针。如果等于,则进行下一步判断。如果mid = 0 || nums[mid - 1] != target,此时说明mid就是该元素第一次出现的位置。如果不满足条件,则说明当前位置等于目标但不是目标元素第一次出现,因此第一次出现会出现在mid左

2022-04-03 04:17:40 98

原创 【每日三题】2022-4-1 LeetCode 31-33

31.下一个排列思路:比当前排列更大的下一个字典序,只需要将一个较小数字,与其后面的一个较大数交换,然后从较小数的位置向后升序排列,已达到最小幅度变化。为使变化幅度最小,我们需要使得这个较小数尽可能靠右,同时要确保右侧有至少一个较大数与其交换,且这个较大数应该尽可能接近较小数。所以第一遍从后向前找,找到第一个从右向左非升序的数,这个时候可以确保其右侧有可以与之交换的较大数。如果找到头都没有找到符合的数,则说明当前的排列为最大字典序,则省去交换步骤,直接将其按升序排列得到最小字典序序列。找到较小数后,第二遍

2022-04-02 15:25:18 764

原创 【每日三题】2022-3-31 LeetCode 28-30

28.实现strStr()思路:逐个比对字符串,暴力求解,复杂度极大。从题解中了解KMP算法。具体实现可参考LeetCode官方题解。https://leetcode-cn.com/problems/implement-strstr/solution/shi-xian-strstr-by-leetcode-solution-ds6y/代码:public int strStr(String haystack, String needle) { if (needle.length() == 0)

2022-04-01 15:15:16 238

原创 【每日三题】2022-3-29 LeetCode 25-27

25.K个一组翻转链表思路:常规情况,使用栈遍历链表,每当栈中的元素等于K时,则翻转一次。因为栈是后进先出的,出栈顺序恰好与入栈顺序相反,可以轻易实现翻转。但这种思路,需要K的空间来存储链表结点,题目提出挑战使用常数空间来翻转,因此挑战使用常数空间。可以观察到每一次翻转,需要保存的主要有这个K元组的前一个结点和后一个结点,因此使用四个结点指针,其中一个保存前一个结点,另一个保存后一个结点,第三个指针和第四个指针用来在中间的k元组进行翻转用。以链表{1,2,3,4,5}, k = 3为例子,步骤如下:

2022-03-30 09:15:35 78

原创 【每日三题】2022-3-28 LeetCode 22-24

22.括号生成思路:一个包含n组括号的有效字符串,一定可以分为"(" + L + ")" + R,其中L和R为包含“0~n-1"对括号的有效字符串,因此考虑递归。这里为什么不将其简单的分为两部分L + R呢,是因为L和R都可能呢为0个括号的有效字符串,而递归需要缩小状态空间。若不每次分出一个括号,则L或R任一为空字符串(即包含0个括号的有效字符串)时,会陷入死循环。L+R中总共包含n-1个括号,每次手动添加一个括号。遍历各种情况。此时可采用缓存来保存之前的结果,因为之后会调用用到。代码:private

2022-03-29 08:14:49 71

原创 【每日三题】2022-3-27 LeetCode 19-21

19.删除链表的倒数第N个结点思路:快慢指针,两个指针之间相差n + 1个位置。当快指针到达链表末尾时,慢指针的下一个结点就是要删除的倒数第N个结点。考虑到删除头结点的情况,引入一个virtual head指针指向整个链表的头部。当快指针先行过程中遇到末尾,则说明链表长度<n,因此不存在倒数第N个结点。代码:public ListNode removeNthFromEnd(ListNode head, int n) { if (head == null) { return

2022-03-28 10:06:09 1113

原创 【每日三题】2022-3-25 LeetCode 16-18

16.最接近的三数之和思路:与15题类似,首先固定第一个数,使用双指针来扫描后面两个数的组合,跳过重复的数字。代码:public int threeSumClosest(int[] nums, int target) { int result = nums[0] + nums[1] + nums[2]; Arrays.sort(nums); for (int i = 0; i < nums.length - 2; i++) { if (i > 0 &

2022-03-26 14:48:01 127

原创 【每日三题】2022-3-24 LeetCode 13-15

13.罗马数字转整数思路:观察规律,除了特殊字符组合外,其他字符表示中,左边的字符均大于等于右边的字符。而当左边的字符小于右边的字符时,表明此时左边字符在整体结果中要被减去。因此建立字符集与值的映射,并遍历字符串,逐个转换。代码:public int romanToInt(String s) { if (s.equals("")) { return 0; } Map<Character, Integer> mapping = new HashMap&

2022-03-25 13:50:19 1022

原创 【每日三题】2022-3-23 LeetCode 10-12

10.正则表达式匹配思路:从前向后匹配(动态规划):状态空间大小为s.length() * p.length(),其中dp[i][j]代表s中的前i个字符和p中前j个字符匹配的结果。初始值为dp[0][0]=true,即两个空字符串匹配成功。状态转移方程如下:当j=0时,除了i=0的时候两串匹配外,其余情况均不匹配(意味着原串不为空,而匹配串匹配的是空串),dp[1~s.length()][0] = false。isMatch(String s, String p, int i, int

2022-03-24 15:09:45 90

原创 【每日三题】2022-3-22 LeetCode 7-9

7. 整数反转思路:利用取余10来提取最后一位,利用除以10来右移一位,将当前位加入到结果的最后一位。需要注意的是判断转换后的数有没有超过取值域。直接比较可能会越界,所以采用/10的方式比较。代码:public int reverse(int x) { int result = 0; while (x != 0) { int bit = x % 10; x /= 10; if (result > Integer.MAX_VALUE

2022-03-23 12:33:49 719

原创 【每日三题】2022-3-21 LeetCode 4-6

4. 寻找两个正序数组的中位数思路:暴力解法,merge两个数组并找中位数。实际我们可以省去merge过程,通过双指针模拟merge找到中位数。因为两个数组都是正序数组,所以从头开始遍历两个数组,将小的那一个去除,同时后移指针并减小计数。直至找到中间的数字。单数长度数组的中位数索引是length / 2,而双数长度数组的中位数索引是length / 2 - 1,与length / 2的两个数字的平均值。代码:public double findMedianSortedArrays(int[] nums

2022-03-23 12:32:30 1240

原创 【每日三题】2022-3-20 LeetCode 1-3

1. 两数之和思路:构造一个map来实现O(1)查找,key使用需要找到的另一半数字,value使用当前索引。遍历数组,如果map中包含nums[i],即又另一个数字与当前数字之和为target,则返回当前索引与另一个数字的索引。因为是从前往后查找,所以另一半一定是先遍历,索引较当前数字较小。如果map中不包含nums[i],则说明已经扫描的数字中没有当前数字的另一半,向map中存入当前数字所期望的另一半的值,与当前索引,继续向后搜索。如果遍历完成后,都没有符合条件的,则说明结果不存在。代码:publ

2022-03-23 12:31:46 1248

原创 树的遍历

树树作为一种高效的查找数据结构,被广泛应用在各种查询场景。今天我们就来总结一下树的有关知识。

2021-04-23 17:37:54 5342

原创 LeetCode Mock Review 2021-4-16

LeetCode Mock Review 2021-4-15今日首次尝试了1.5小时三道题的mock。总体难度还算挺大,其中前两道题做过,所以总共花了20分钟,最后一道题想了很久最后一次实现。102. Binary Tree Level Order Traversal102. Binary Tree Level Order Traversal这道题是典型的bfs问题。提到bfs,首先就是新建一个队列,将头结点放入队列,然后一个层次一个层次的遍历,遍历的时候再将当前遍历结点的非空子结点加入队列。直到

2021-04-16 21:47:40 108

原创 LeetCode Mock Review 2021-4-15

LeetCode Mock Review 2021-4-13今天的题也都很简单,两道easy题共花了7分半的时间。9. Palindrome Number9. Palindrome Number第一道题回文数字,因为负数总不为回文数字且小于十的时候一定为回文数字,因此只用判断大于10的正数即可。共有两种思路。:直接判断数字是否回文。具体方法是求取数字一半的reverse,然后比较两者是否相等或者是/10的关系。class Solution { public boolean isPa

2021-04-15 20:33:03 95

原创 LeetCode Mock Review 2021-4-13

LeetCode Mock Review 2021-4-12今天的Mock也很简单,是两道easy题且都是数学题。292. Nim Game292. Nim Game一看到这道题我就想这不是dp问题吗。dp[i]={turei⩽3!dp[i−1]∣∣!dp[i−2]∣∣!dp[i−3]otherwisedp[i]=\begin{cases}ture& i \leqslant 3\\!dp[i-1] || !dp[i-2] ||!dp[i-3] &otherwise\en

2021-04-13 17:38:22 79

原创 LeetCode Mock Review 2021-4-12

LeetCode Mock Review 2021-4-11今天的Mock属于很简单的那种,读题花费了大部分时间。15分钟轻松AC。836. Rectangle Overlap836. Rectangle Overlap第一道题数学题,先判断两个矩形的坐标是否都正确。然后取其中一个作为参考基准,判断另一个矩形与其是否有重叠。要注意的是testcase里有的坐标并不是矩形而是一条线。第一次提交的时候被这个testcase害了。class Solution { public boolean i

2021-04-12 17:38:53 81

原创 LeetCode Mock Review 2021-4-11

LeetCode Mock Review 2021-04-11118. Pascal’s Triangle118. Pascal’s Triangle一道数学题。第i层的第k个数字等于第i-1层的第k-1个数字和第k个数字的和。使用一个List保存上一层的数字,先添加首位的1然后填充后续数字,最后再添加末尾的1。class Solution { public List<List<Integer>> generate(int numRows) { Lis

2021-04-11 20:47:27 67

原创 LeetCode Mock Review 2021-04-09

LeetCode Mock Review 2021-04-09记录一下自己的Mock1160. Find Words That Can Be Formed by Characters1160. Find Words That Can Be Formed by Characters这是一道easy题,首先对给的chars按字母顺序计数。然后遍历words,判断是不是可以form。要注意的点是在每次判断单词时要复原原本的count数组。最简单的办法是将count数组存下来,每次用的时候复制一份。cla

2021-04-09 21:22:14 70

空空如也

空空如也

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

TA关注的人

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