![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
枳洛淮南✘
没有人生来就是弱者
展开
-
23. 合并K个升序链表
23. 合并K个升序链表链接思路1、顺序合并2、分治合并代码1、顺序合并2、分治合并链接合并K个升序链表思路1、顺序合并合并两个有序链表先完成一个可以合并两个升序链表的方法,用一个变量 ret 来维护以及合并的链表,第 i 次循环把第 i 个链表和 ret合并,答案保存到 ret中2、分治合并将 kk 个链表配对并将同一对中的链表合并;第一轮合并以后, k 个链表被合并成了 2/k个链表,平均长度为 2n/k,然后是 4/k个链表, 8/k 个链表等等;重复这一过程,直到我们得到了最终原创 2021-07-18 12:55:03 · 161 阅读 · 1 评论 -
19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点链接思路1、双指针2、计算链表长度3、栈代码1、双指针2、计算链表长度3、栈链接删除链表的倒数第 N 个结点思路1、双指针链表中倒数第k个节点可以使用两个指针 p 和 q 同时对链表进行遍历,并且 [t 比 q 快 n 个节点。当 p 遍历到链表的末尾时,q 恰好处于倒数第 n 个节点。具体地,初始时 p 和 q 均指向头节点。首先使用 p 对链表进行遍历,遍历的次数为 n次。此时,p 和 q 之间间隔了 n−1 个节点,即 p 比 q 超前了 n 个节点。原创 2021-07-18 12:18:37 · 108 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
剑指 Offer 57 - II. 和为s的连续正数序列链接代码枚举枚举+数学优化双指针链接剑指 Offer 57 - II. 和为s的连续正数序列代码枚举枚举每个正整数为起点,判断以它为起点的序列和 sum 是否等于 target 即可,由于题目要求序列长度至少大于 2,所以枚举的上界为public int[][] findContinuousSequence1(int target) { //让每个整数都做为起点尝试 List<int[]&g原创 2021-07-11 15:47:18 · 89 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润
剑指 Offer 63. 股票的最大利润链接代码暴力破解法寻找最低点链接剑指 Offer 63. 股票的最大利润代码暴力破解法除了慢一点也没啥//双循环暴力法 public int maxProfit(int[] prices) { int ret = 0; for (int i = 0; i < prices.length - 1; i++) { for (int j = i + 1; j <原创 2021-07-08 11:48:53 · 91 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n链接解法链接剑指 Offer 64. 求1+2+…+n解法C++解法class Solution {public: int sumNums(int n) { int temp = n; temp && (temp += (sumNums(n-1))); return temp; }};Javapublic int sumNums(int n) {原创 2021-07-08 11:23:26 · 74 阅读 · 0 评论 -
剑指 Offer 49. 丑数
剑指 Offer 49. 丑数链接思路代码链接剑指 Offer 49. 丑数思路第一个丑数是1,以后的丑数都是基于前面的丑数进行计算获得,分别乘2,3,5构成。我们每次添加进去一个当前计算出来个三个丑数的最小的一个,并且是谁计算的,谁指针就后移一位。代码class Solution { //第一个丑数是1,以后的丑数都是基于前面的丑数进行计算获得 // 分别乘2,3,5构成的。我们每次添加进去一个当前计算出来个 // 三个丑数的最小的一个,并且是谁计算的,谁指针就后移一原创 2021-07-07 14:51:31 · 83 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串链接题解代码链接剑指 Offer 58 - II. 左旋转字符串题解首先判断字符串是否为空字符串,若为空字符串则无论怎样旋转返回值都是空字符串然后在确保字符串不为空的情况下,判断要旋转的字符个数,将大于字符串长度的数进行取模,最后达到的旋转字符数必然小于字符串长度之后用substring函数解决问题即可代码class Solution { public String reverseLeftWords(String s, int n)原创 2021-06-29 00:57:50 · 82 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子链接题解代码链接剑指 Offer 61. 扑克牌中的顺子题解首先将数组进行排序,然后遍历数组,记录数组中万能牌(0)的数量,遍历完万能牌后,遍历非万能牌,若某一非万能牌的下一张牌与其相等,则该数组必然不为顺子,后续如果牌不连续,则记录空缺位置,直到遍历完数组,然后比较万能牌是否大于等于空缺位的数量,大于等于则为顺子,反之则不为顺子。代码public boolean isStraight(int[] nums) { //首先将数组排序原创 2021-06-29 00:36:42 · 83 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
剑指 Offer 41. 数据流中的中位数链接思路代码链接剑指 Offer 41. 数据流中的中位数思路用大顶堆+小顶堆方法,可以看作大顶堆是普通班,小顶堆是实验班。数量上时刻保持 小顶-大顶<=1(两堆相等或者小顶比大顶多一个)。新学生先入普通班(大顶堆),此时可能会失去平衡了,于是取大顶堆的第一个(班里最好的学生)加入实验班(小顶堆),判断若数量过多(不是等于或多一个),取第一个(实验班里最差的学生)到普通班(大顶堆)里。取中位数的时候,若两堆数量相等,则各取堆顶取平均,若小顶比大顶多一,原创 2021-06-19 20:46:34 · 70 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串链接题解链接添加链接描述题解class Solution { public int translateNum(int num) { if (num <= 9) { return 1; } //获取输入数字的余数(后两位),递归翻译 int temp = num % 100; //小于等于9 或 大于等于 26 ,余数原创 2021-06-19 15:25:54 · 87 阅读 · 0 评论 -
面试题 02.01. 移除重复节点
面试题 02.01. 移除重复节点链接思路代码链接面试题 02.01. 移除重复节点思路记录已经出现过的结点,添加未出现过的结点,三种方法都在代码里,并不难理解代码public ListNode removeDuplicateNodes(ListNode head) { //传入为空或只有一个结点,则返回head if (head == null || head.next == null) { return hea原创 2021-06-02 20:52:50 · 66 阅读 · 0 评论 -
剑指 Offer题解
剑指 Offer题解04.二维数组中的查找05.替换空格06. 从尾到头打印链表07. 重建二叉树09. 用两个栈实现队列10. I. 斐波那契数列10. II. 青蛙跳台阶问题11. 旋转数组的最小数字14- I. 剪绳子14- II. 剪绳子 II15. 二进制中1的个数16. 数值的整数次方17. 打印从1到最大的n位数18. 删除链表的节点21. 调整数组顺序使奇数位于偶数前面22.链表中倒数第k个节点24. 反转链表25. 合并两个排序的链表29. 顺时针打印矩阵30. 包含min函数的栈31.原创 2021-06-01 11:48:22 · 444 阅读 · 21 评论 -
剑指 Offer 50. 第一个只出现一次的字符
剑指 Offer 50. 第一个只出现一次的字符连接思路代码连接剑指 Offer 50. 第一个只出现一次的字符思路创建一个字典数组,遍历一次将字符串中出现过的字母次数存进字典数组,再遍历一次字符串,将首次出现次数为 1 的字母输出,没有为 1 次数的字母的话就返回 ’ ’代码class Solution { public char firstUniqChar(String s) { if ("".equals(s)) {原创 2021-06-01 11:26:04 · 73 阅读 · 0 评论 -
剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法链接思路代码链接剑指 Offer 65. 不用加减乘除做加法思路^ 亦或 ----相当于 无进位的求和, 想象10进制下的模拟情况:(如:19+1=20;无进位求和就是10,而非20;因为它不管进位情况)& 与 ----相当于求每位的进位数, 先看定义:1&1=1;1&0=0;0&0=0;即都为1的时候才为1,正好可以模拟进位数的情况,还是想象10进制下模拟情况:(9+1=10,如果是用&的思路来处理,则9+1得到原创 2021-05-31 16:17:39 · 82 阅读 · 1 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字
剑指 Offer 62. 圆圈中最后剩下的数字约瑟夫环问题链接解法链表解法公式法约瑟夫环问题约瑟夫环问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。然后轮到B报数,他报2。非常惨,他被杀了C接着从1开始报数接着轮到A报数,他报2。也被杀死了。最终胜利者是C链接剑指 Offe原创 2021-05-25 15:49:06 · 438 阅读 · 8 评论 -
剑指 Offer 57. 和为s的两个数字
剑指 Offer 57. 和为s的两个数字链接代码链接剑指 Offer 57. 和为s的两个数字代码public int[] twoSum(int[] nums, int target) { //递增,有序 int left = 0, right = nums.length - 1; while (left <= right) { //左右两数和 int mid = num原创 2021-05-25 11:34:10 · 100 阅读 · 1 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0~n-1中缺失的数字链接解法遍历代码二分代码双指针链接剑指 Offer 53 - II. 0~n-1中缺失的数字解法遍历使用一个数组,该数组长度为原数组长度+1,遍历原数组,新数组中下标为原数组中元素,则将其赋值为1,否则不用管则为0,遍历新数组,返回元素为1的下标,即为原数组中丢失的数字代码class Solution { public int missingNumber(int[] nums) { //递增,排序原创 2021-05-25 11:11:17 · 156 阅读 · 1 评论 -
1356. 根据数字二进制下 1 的数目排序
1356. 根据数字二进制下 1 的数目排序链接解法一解法二链接1356. 根据数字二进制下 1 的数目排序解法一数组重赋值//数组重赋值,由于题目限定arr[i] 中的数不超过 10000 public int[] sortByBits(int[] arr) { int[] ret = new int[arr.length]; for (int i = 0; i < arr.length; i++) {原创 2021-05-18 14:23:25 · 71 阅读 · 0 评论 -
1122. 数组的相对排序
1122. 数组的相对排序链接解法代码大佬链接1122. 数组的相对排序解法遍历arr1,如果map中没有某元素,则将其put进去并设置值为从,否则将值加一,然后遍历arr2,按相对顺序将元素去除并放入预先准备好的数组arr3,然后将对应元素的值减一,直到减到0,然后将arr1排序,并将剩余元素放入arr3代码class Solution { public int[] relativeSortArray(int[] arr1, int[] arr2) { //a原创 2021-05-18 10:58:56 · 239 阅读 · 0 评论 -
面试题 10.01. 合并排序的数组
面试题 10.01. 合并排序的数组链接链接面试题 10.01. 合并排序的数组原创 2021-05-17 19:28:28 · 50 阅读 · 0 评论 -
234. 回文链表 面试题 02.06. 回文链表
234. 回文链表链接解法一代码解法二代码链接234. 回文链表解法一先将链表进行反转,然后对其 val 进行依次判断,不同则返回 false这里注意:反转的时候要用一个副本来进行反转,否则会对后续判断造成影响代码class Solution { public boolean isPalindrome(ListNode head) { if (head == null || head.next == null) { r原创 2021-05-15 16:01:40 · 135 阅读 · 0 评论 -
12. 整数转罗马数字 13. 罗马数字转整数
12. 整数转罗马数字 13. 罗马数字转整数链接代码链接代码链接12. 整数转罗马数字代码class Solution { public String intToRoman(int num) { int[] values = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] reps = new String[]{"M", "CM", "D", "CD原创 2021-05-14 12:56:44 · 107 阅读 · 1 评论 -
349. 两个数组的交集 350. 两个数组的交集 II
349. 两个数组的交集 350. 两个数组的交集 II链接解法一解法二解法链接349. 两个数组的交集解法一class Solution { public int[] intersection(int[] nums1, int[] nums2) { if (nums1 == null || nums2 == null) { return null; } Set<Integer>原创 2021-05-14 12:33:45 · 52 阅读 · 0 评论 -
263. 丑数
263. 丑数链接代码链接263. 丑数代码public boolean isUgly(int n) { if (0 == n) { return false; } while (n % 2 == 0 || n % 3 == 0 || n % 5 == 0) { if (n % 2 == 0) { n /=原创 2021-05-13 22:43:14 · 55 阅读 · 0 评论 -
231. 2的幂 326. 3的幂 342. 4的幂
LeetCode231. 2的幂链接代码326. 3的幂链接代码342. 4的幂链接代码231. 2的幂链接231. 2代码//循环 public boolean isPowerOfTwo(int n) { if (0 == n) { return false; } while (n % 2 == 0) { n /= 2; }原创 2021-05-13 22:29:04 · 87 阅读 · 0 评论 -
204. 计数质数(厄拉多塞筛法)
204. 计数质数链接厄拉多塞筛法代码普通解法链接204. 计数质数厄拉多塞筛法西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese)。具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一原创 2021-05-13 09:38:13 · 259 阅读 · 1 评论 -
118. 杨辉三角
118. 杨辉三角链接链接118. 杨辉三角class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> ret = new ArrayList<>(); for (int i = 0; i < numRows; i++) { List原创 2021-05-11 15:21:23 · 44 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树链接代码链接108. 将有序数组转换为二叉搜索树代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeN原创 2021-05-11 15:00:21 · 87 阅读 · 0 评论 -
28. 实现 strStr()
@[TOC](28. 实现 strStr())链接28. 实现 strStr()一首先对特殊字符串进行判断public static int strStr1(String haystack, String needle) { if ("".equals(needle)) //needle 为空字符串 { return 0; } //到了这里,则 needle 必然不为空,若 haystack 为空,原创 2021-05-10 13:21:45 · 75 阅读 · 0 评论 -
26. 删除有序数组中的重复项
26. 删除有序数组中的重复项链接链接删除有序数组中的重复项class Solution { //数组已经有序 public int removeDuplicates(int[] nums) { if (nums == null) //传入数组为空则返回 0 { return 0; } if (nums.length == 1) //只有一个元素则返回1 {原创 2021-05-10 10:58:43 · 43 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字链接思路map摩尔投票排序代码map摩尔投票排序链接添加链接描述思路map遍历数组,同时用一个map的键来存储数组中出现的数,用map的值来存储数的出现次数,最后,遍历map,如果map中某个键对应的值超过了数组的一半,则将其返回,由于题目设置,势必存在,在循环外返回-1(即数组中没有一个数出现次数超过数组中数字的一半)摩尔投票遍历数组,如果count 为0,则将该数赋值给card,然后遍历之后的数字,相同则加1,不同则减一,遍历完成之后,原创 2021-04-21 16:47:11 · 69 阅读 · 1 评论 -
剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数链接思路一、库函数二、冒泡排序三、折半插入排序四、插入排序五、选择排序六、选择排序变形代码一、库函数二、冒泡排序三、折半插入排序四、插入排序五、选择排序六、选择排序变形链接剑指 Offer 40. 最小的k个数排序相关算法思路一、库函数直接调用 Java util 包里的Arrays中的排序方法,将数组进行排序,并输出前k个数二、冒泡排序用冒泡排序对数组进行排序,输出前k个数(是真的慢)三、折半插入排序用折半插入排序对数组进行排序,输出前k个数四、原创 2021-04-21 00:03:21 · 374 阅读 · 7 评论 -
插入排序
插入排序import java.io.*;/** * @author 枳洛淮南 * @version 1.0 * @Description 功能 * @Date 2021/4/15 下午 15:26 */public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputS原创 2021-04-20 21:17:09 · 130 阅读 · 3 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
剑指 Offer 32 - I. 从上到下打印二叉树链接思路代码链接剑指 Offer 32 - I. 从上到下打印二叉树二叉树的层序遍历思路代码class Solution { public int[] levelOrder(TreeNode root) { if (root == null) { return new int[0]; } Queue<TreeNode> que原创 2021-04-20 10:36:49 · 58 阅读 · 1 评论 -
剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入、弹出序列链接代码链接剑指 Offer 31. 栈的压入、弹出序列栈的压入、弹出序列代码import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;import java.util.List;/** * @author 枳洛淮南 * @version 1.0 * @Description 剑指 Offer 31. 栈的压入、弹出序列 * @Date原创 2021-04-19 21:22:42 · 64 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
剑指 Offer 30. 包含min函数的栈链接思路一、用Deque实现二、用栈实现代码一、用Deque实现二、用栈实现链接剑指 Offer 30. 包含min函数的栈最小栈思路一、用Deque实现用Deque 模拟栈,用一个普通栈来进行数据的压入弹出,再定义一个最小栈来进行获取最小值二、用栈实现用两个栈来模拟实现代码一、用Deque实现import java.util.Deque;import java.util.LinkedList;import java.util.Stac原创 2021-04-18 20:13:31 · 120 阅读 · 2 评论 -
剑指 Offer 29. 顺时针打印矩阵
剑指 Offer 29. 顺时针打印矩阵链接思路代码链接剑指 Offer 29. 顺时针打印矩阵螺旋方阵思路按顺序进行遍历(具体细节注释在代码里)代码class Solution { public int[] spiralOrder(int[][] matrix) { int row = matrix.length; if (row == 0) //输入为空则退出 { return new int[0原创 2021-04-18 19:47:00 · 101 阅读 · 3 评论 -
剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表链接思路代码链接剑指 Offer 25. 合并两个排序的链表合并两个升序链表思路首先判断头结点,然后将两个链表进行拆分插入(取头结点较小的插入,插入后头结点后移),最后插入完则必然会有一个链表没有被完全插入,进行直接拼接即可代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2021-04-13 18:21:48 · 69 阅读 · 2 评论 -
剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表链接思路一、二、代码一、二、链接剑指 Offer 24. 反转链表思路一、将链表拆开进行尾插,同时要用一个新的头结点作为新的链表头二、将链表拆开进行头插代码一、/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }原创 2021-04-13 15:24:30 · 65 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;原创 2021-03-14 18:25:00 · 81 阅读 · 0 评论