自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode-004-寻找两个正序数组的中位数

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数

2021-02-12 10:50:04 192

原创 LeetCode-206-反转链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路采用迭代的方式,三个辅助变量pre代表原顺序的前一个节点cur代表当前节点next代表原顺序的下一个节点于是当cur != null时循环操作记录当前节点原顺序下的next节点为next当前节点的next指向pre,此时断开连接破坏原顺序然后迭代pre = cur,cur = next,使各个指针在原顺

2021-01-24 11:50:04 153

原创 LeetCode-205-同构字符串

给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。示例 1:输入:s = “egg”, t = “add”输出:true示例 2:输入:s = “foo”, t = “bar”输出:false来源

2021-01-24 11:04:10 176

原创 LeetCode-204-计数质数

统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-primes解题思路用一个长度为n的布尔数组,记录哪些数是合数遍历数字从2到n,跳过合数,遇到素数x计数加一然后将2x, 3x, 4x, ...这些数字标记为合数代码class Solution {

2021-01-24 00:46:58 113

原创 LeetCode-203-移除链表元素

删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5解题思路用一个假的头节点,方便写代码ListNode dummyHead = new ListNode(); dummyHead.next = head;用一个节点指向假的头节点,然后当该节点的next不为空时,判断next.val是否为所给值如果是则断开next cur.next = c

2021-01-23 23:17:05 91

原创 LeetCode-202-快乐数

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1来源:力扣(LeetCode

2021-01-23 22:32:57 68

原创 LeetCode-201-数字范围按位与

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range解题思路与运算就是全部为1才为1,所以我们可以从n开始,让n &= n - 1直到n <

2021-01-23 21:38:29 86

原创 LeetCode-200-岛屿数量

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1来源:力扣(LeetCode)链接:https://

2021-01-23 16:43:40 73 1

原创 LeetCode-199-二叉树的右视图

解题思路利用双端队列进行广度优先遍历,将每一层的最后的节点加入结果集代码class Solution { public List<Integer> rightSideView(TreeNode root) { LinkedList<Integer> result = new LinkedList<>(); if (root == null) { return result; } .

2021-01-23 15:47:12 71

原创 LeetCode-198-打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。  偷窃到的最高金额 = 1 + 3 = 4 。来源:力扣(L

2021-01-23 15:34:14 69

原创 LeetCode-191-位1的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数解题思路逐位检查,如果是1则计数+ 1代码public class Solution { public int hammingWeight(int n) { int result = 0; for (int i = 0; i < 32; i++) { if ((n & 1 << i) != 0) {

2021-01-23 11:16:52 51

原创 LeetCode-190-颠倒二进制位

颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000来源:力扣(LeetCode)链接:https://leetc

2021-01-23 11:01:58 74

原创 LeetCode-189-旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5

2021-01-22 16:36:43 306

原创 LeetCode-187-重复的DNA序列

所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例 1:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”输出:[“AAAAACCCCC”,“CCCCCAAAAA”]示例 2:输入:s = “AAAAAAAAAAAAA”输出

2021-01-22 15:32:26 124

原创 LeetCode-179-最大数

给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-number解题思路将整型转为字符串数字,然后自定义比较器,用

2021-01-22 15:07:18 158

原创 LeetCode-174-地下城游戏

一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增

2021-01-22 14:09:28 56

原创 LeetCode-173-二叉搜索树迭代器

解题思路使用一个ArrayList保存按中序遍历顺序的节点,因为二叉搜索树按中序遍历的结果是升序的再定义一个index = -1,先判断索引index + 1 < nodes.size()是否合法合法则next()返回ArrayList对应索引index + 1的元素代码class BSTIterator { ArrayList<Integer> nodes = new ArrayList<>(); int index = -1; publ.

2021-01-22 10:27:46 86

原创 LeetCode-172-阶乘后的零

给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes解题思路n的阶乘,从1连乘到n,这中间每个数能够拆成多少个5,最终结果末尾就有多少个0因为2 * 5 = 10

2021-01-22 10:10:18 68

原创 LeetCode-171-Excel表列序号

给定一个Excel表格中的列名称,返回其相应的列序号。例如,A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/excel-sheet-column-number解题思路从左到右逐个取出,每往右移动一次指针,结果先乘26再加上当前指针所指字母代表数值代码class Solution { p

2021-01-22 10:10:08 68

原创 LeetCode-169-多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element解题思路遍历一遍数组,用两个变量辅助记录,一个记录多数元素

2021-01-22 10:09:59 67

原创 LeetCode-168-Excel表列名称

给定一个正整数,返回它在 Excel 表中相对应的列名称。例如,1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> AB ...来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/excel-sheet-column-title解题思路将输入的数用类似于求十进制的时候的操作:模十取低位,除以十舍掉低位将'A' + (n - 1) % 26插入到结果的前面,比如1

2021-01-21 20:46:40 50

原创 LeetCode-167-两数之和II

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 i

2021-01-21 18:05:28 56

原创 LeetCode-165-比较版本号

给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001

2021-01-21 17:39:22 117

原创 LeetCode-164-最大间距

给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-gap解题

2021-01-21 16:55:59 83

原创 LeetCode-162-寻找峰值

峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5解释:你的函数可以返回索引 1,其峰值元素为 2;&

2021-01-21 14:13:11 66

原创 LeetCode-160-相交链表

解题思路双指针,先分别指向不同链表,为空时往后迭代,遇到相同节点时可以返回结果如果其中一个为空则让它指向另一个链表的头继续往后迭代下面的程序为什么不会死循环?当两个链表没有交点时,最多两个节点分别走完两条链表的总长度后就都变为null此时就会退出循环代码public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == nu.

2021-01-21 11:05:54 58

原创 LeetCode-155-最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack解题思路用两个栈,一个保存数据,一个保存最小值最小栈先给一个整型最大值在栈底,方便后续操作,入栈时不用判断栈是否为空

2021-01-21 10:28:58 36

原创 LeetCode-154-寻找旋转排序数组中的最小值II

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sort

2021-01-21 09:41:29 148

原创 LeetCode-153-寻找旋转排序数组中的最小值

假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。请找出其中最小的元素。示例 1:输入:nums = [3,4,5,1,2]输出:1示例 2:输入:nums = [4,5,6,7,0,1,2]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array解题

2021-01-21 09:15:37 37

原创 LeetCode-152-乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-product-su

2021-01-21 00:26:08 95

原创 LeetCode-151-翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。说明:无空格字符构成一个 单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。示例 1:输入:“the sky is blue”输出:“blue is sky the”示例 2:输入:"  hello world!  "输出:“world! hello”解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。来源

2021-01-20 23:34:04 43

原创 LeetCode-150-逆波兰表达式

根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入:

2021-01-20 13:58:10 97

原创 LeetCode-147-对链表进行插入排序

解题思路利用一个假的头节点,方便操作利用两个指针,一个记录上一轮排序后的尾节点,一个记录当前要插入的节点如果上次排序后的尾节点小于等于当前节点,则直接跳过当前节点,做好迭代工作即可反之要从头往后找出第一个比cur大的节点的前一个节点pre,然后将当前节点插入到pre后面代码class Solution { public ListNode insertionSortList(ListNode head) { if (head == null || head.next ==

2021-01-19 23:54:05 67

原创 LeetCode-146-LRU缓存机制

运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,

2021-01-19 23:00:03 67

原创 LeetCode-143-重排链表

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)链接:ht

2021-01-19 16:19:00 113

原创 LeetCode-142-环形链表II

解题思路如何判断是否有环如何找出环的入口?将有环的链表,分为三部分链表首节点到入口,长度为a入口到判断是否有环时快慢指针相遇的节点,长度为b快慢指针相遇的节点到入口,长度为c分析快慢指针所走长度已经关系快指针所走长度:a + n(b + c) + b慢指针所走长度:a + b快指针所有长度为慢指针的两倍a + n(b + c) + b = 2(a + b)可得a = (n - 1)(b + c) + c,而b + c是环的长度所以当快慢指针相遇时,用一个指针指向链表首节点,然.

2021-01-19 14:33:06 46

原创 LeetCode-141-环形链表

给定一个链表,判断链表中是否有环解题思路是用快慢指针,快指针一次往后迭代两个节点,慢节点一次迭代一个节点,两个节点如果能相遇则代表有环代码public class Solution { public boolean hasCycle(ListNode head) { if (head == null) { return false; } // 快慢指针 ListNode slow = head, quic

2021-01-19 11:01:26 39

原创 LeetCode-140-单词拆分II

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = “catsanddog”wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]输出:[  “cats and dog”,  “cat sand dog”]示例 2:输

2021-01-19 01:02:55 69

原创 LeetCode-139-单词拆分

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordDict

2021-01-18 17:02:38 79

原创 LeetCode-138-复制带随机指针的链表

解题思路先遍历一遍链表,克隆出一条没有随即指针的新链表,期间记录(Map<源节点, 克隆节点>)每个节点与其克隆的新节点再遍历一遍链表,根据旧节点的随即指针给新节点的随机指针复制clone.get(cur).random = clone.get(cur.random)代码class Solution { public Node copyRandomList(Node head) { if (head == null) { return n.

2021-01-18 16:18:15 55

空空如也

空空如也

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

TA关注的人

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