![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
D_W?
笑看人生峰高处,唯有磨难多正果。
展开
-
剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像 例如输入: 4 / \ 2 7 / \ / \ 1 3 6 9 镜像输出: 4 / \ 7 2 / \ / \ 9 6 3 1 class Solution { public TreeNode mirrorTree(TreeNode root) { Queue<TreeNode> queue=new LinkedList&原创 2021-11-22 22:33:45 · 182 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
快慢指针 两个指针 一个快指针,一个慢指针 快指针先走k步 然后两个一起走, 等于是快指针走了N步,慢指针走了N-k步。 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。 class Solution { public ListNode getKthFromEnd(ListNode head, i原创 2021-11-22 21:43:14 · 170 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / 4 5 / 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 输入:A = [1,2,3], B = [3,1] 输出:false class Solution { //判断二叉树B是不是二叉树A的子结构 public boolean isSubStruc原创 2021-11-21 21:02:43 · 187 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [20,9], [15,7] ] 先上代码 class Solution { public List<List<Integer>原创 2021-11-21 18:41:06 · 42 阅读 · 0 评论 -
剑指 Offer 50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例 1: 输入:s = “abaccdeff” 输出:‘b’ 示例 2: 输入:s = “” 输出:’ ’ class Solution { public char firstUniqChar(String s) { HashMap<Character,Boolean> map=new HashMap<>(); for(int i=0;i<.原创 2021-11-18 17:59:57 · 124 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 采用二分法加暴力法 class Solution { public int minArray(int[] numbers) { int i=0,j=numbers原创 2021-11-18 17:14:08 · 50 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
线性查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target =原创 2021-11-17 19:19:26 · 40 阅读 · 0 评论 -
205. 同构字符串
哈希表映射 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 示例 1: 输入:s = “egg”, t = “add” 输出:true class Solution { public boolean isIsomorphic(String s, String t)原创 2021-11-17 18:35:28 · 54 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
二分。 没错,又是个二分,二分杀死我 看的题解也懵了好久。 但总结出一个东西,如果给的是有序数组,优先考虑二分法. 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 具体细节写在代码注释里面吧(好理解) class Solution { public int missingNumber(int[] nums) {原创 2021-11-17 16:56:58 · 150 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字
这道题用二分法解决 不过大部分人(加上我)就算知道了用二分法解题,也还是无从下手吧,因为这个题的只要难点是找重复数字的左右边界,**只要找到了左边界(left)和右边界(right),就可以用right-left-1求出重复数字的长度。**这个应该不难理解,因为数组是有序的,重复数字是连续的,所以重复数字是一段一段的。 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 先上代码,让大家看一下。 class Solution { public int se原创 2021-11-17 15:44:48 · 50 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
先言:这道题主要是用了HashSet,存储不重复的值。 原谅我一开始根本没想到用HashSet,竟然用HashMap里的value来计算每个值重复的个数。属实是愚昧了。 题目: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 class Solution { public in原创 2021-11-16 21:47:22 · 41 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
这是自己做的方法,很笨,对吧,我也觉得。 class Solution { public String reverseLeftWords(String s, int n) { int length=s.length(); char[] str=new char[length]; int j=0; for(int i=0;i<length;i++){ if(i<length-n){原创 2021-11-16 18:59:11 · 42 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” class Solution { public String replaceSpace(String s) { int length=s.length(); char[] str=new char[length*3]; int size=0; for(int i=0;i<length;i++){原创 2021-11-15 22:45:49 · 3347 阅读 · 0 评论 -
反转链表-java
力扣 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 力扣的头节点好像和c不一样,头节点直接存放第一个有效数据 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next原创 2021-11-13 20:26:11 · 498 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
自己首先这道题是没有做出来的,是看了题解之后才敲出来的。 题解很精妙。反正我开始做这个题没有想出来。 用了HashMap,键存放原来链表的结点,值存放克隆后的新结点。 先将新旧结点存放在HashMap中,然后在循环里面来连接新结点,同时也连接新结点的random。两者同时连接。时间复杂度为O(N),很巧妙。话不多说,上代码。 class Solution { public Node copyRandomList(Node head) { Node cur=head;原创 2021-11-15 20:00:14 · 542 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题很简单,自己也开始慢慢做题,提示自己的算法能力,自己的算法太弱了。 愿与各位大佬一起慢慢进步。 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 解法:用栈做中间桥梁来存储链表数据。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * List原创 2021-11-14 21:52:50 · 189 阅读 · 0 评论