- 博客(22)
- 收藏
- 关注
原创 面试题 04.10. 检查子树
面试题 04.10. 检查子树难度中等52检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。注意:此题相对书上原题略有改动。示例1: 输入:t1 = [1, 2, 3], t2 = [2] 输出:true示例2: 输入:t1 = [1, null, 2
2022-03-23 00:36:46
120
原创 面试题 08.02. 迷路的机器人
面试题 08.02. 迷路的机器人难度中等87设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用1和0来表示。返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。如果没有可行的路径,返回空数组。class Solution { public List<List<Integer...
2022-03-18 14:04:09
202
原创 547. 省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。。情况就是这么个情况,就是一堆
2022-03-15 21:00:27
111
原创 649. Dota2 参议院
Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利:如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。给定一个字符串代表每个参议员的阵营。字母
2022-02-12 19:19:45
123
原创 121. 买卖股票的zui佳时机 Ⅰ
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。class Solution { public int maxProfit(int[] prices) { int maxPro = 0, min = prices[0];
2022-02-06 00:19:06
268
原创 234. 回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 falseclass Solution { public boolean isPalindrome(ListNode head) { if(head.next == null){ return true; } List<Integer> list = new ArrayList<>();
2022-02-05 23:54:09
170
原创 219. 存在重复元素 II
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < nums.length; i++){ if(map.containsKey(nums[i]) && i - map.g.
2022-01-19 23:00:10
290
原创 461. 汉明距离
class Solution { public int hammingDistance(int x, int y) { int z = x ^ y; String s = Integer.toBinaryString(z); int result = 0; for(int i = 0; i < s.length(); i++){ if(s.charAt(i) == '1'){ .
2022-01-19 14:26:32
4208
原创 1509. 三次操作后最大值与最小值的最小差
给你一个数组nums,每次操作你可以选择nums中的任意一个元素并将它改成任意值。请你返回三次操作后, nums中最大值与最小值的差的最小值。示例 1:输入:nums = [5,3,2,4]输出:0解释:将数组 [5,3,2,4] 变成 [2,2,2,2].最大值与最小值的差为 2-2 = 0 。示例 2:输入:nums = [1,5,0,10,14]输出:1解释:将数组 [1,5,0,10,14] 变成 [1,1,0,1,1] 。最大值与最小值的差为 1-0 =...
2021-11-26 21:24:49
296
原创 122. 买卖股票的zui佳时机 (二)
给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。...
2021-11-17 00:45:04
10783
原创 94. 二叉树的中序遍历
已经有相当长一段时间没有写博客了,搞后端框架和学习技术组件实在是身心俱疲今天简单复习一下中序遍历好了其实这是个很经典的代码模板,可以当成母模块在其他进阶版的题目中用到class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); Stack<TreeN
2021-11-17 00:40:40
79
原创 面试题 02.05. 链表求和
题目:给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int carry = 0; ListNode result = new ListNode(0); ListNode resultAhead
2021-10-10 00:05:40
223
原创 面试题 10.01. 合并排序的数组
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化A 和 B 的元素数量分别为m 和 n。方法一:双指针法:代码:class Solution { public void merge(int[] A, int m, int[] B, int n) { int[] result = new int[m+n];//造一个新的空间数组,用来存储排序后的数组 ...
2021-10-09 00:15:58
70
原创 剑指 Offer 15. 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量).)。public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0; while(n != 0){ n = n & (n-1); .
2021-09-02 00:30:51
43
原创 剑指 Offer 39. 数组中出现次数超过一半的数字
好久没写博客了,前不久刚回到学校,来吧来吧搞起来题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2这题目我一看到的时候就在想,嗯?半数以上,那排序后肯定在中位数的位置上咯,Arrays.sort()一波然后取索引为num.length/2,但是转念一想,排序的话时间复杂度肯定让我很难堪,所以在我这坨叹为观止的大脑的飞速运转下,去.
2021-09-01 19:59:13
47
原创 剑指 Offer 52. 两个链表的第一个公共节点
题目:输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:首先,我们要先判断极端条件,比如任何一条链表为空都会让整个程序直接返回null;然后我们需要考虑的是A和B链条不重合的节点数量是否相同,如果相同,那自然是万事大吉,几步遍历就找到了。可若是节点不同,那么我们可以观察到:遍历完“A链表加上B链表的未重合部分”和“B链表加上A链表的未重合部分的距离是一样的”(这句话可以细品)所以我们可以设置一个pA指针指向head...
2021-08-27 00:22:01
57
原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。代码:class Solution { public int[] exchange(int[] nums) { int i = 0; int j = nums.length - 1; int temp; while(i < j){ while(i < nums.len
2021-08-24 00:38:28
61
原创 leetcode-11. 盛最多水的容器(双指针)
题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。代码:class Solution { public int maxArea(int[] height) { int i = 0; int j = height.l...
2021-08-12 01:23:44
102
1
原创 剑指 Offer 06. 从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。代码:class Solution { public int[] reversePrint(ListNode head) { ListNode node = head; int count = 0; while(node!=null){ count++; node = node.next; }
2021-08-11 20:22:30
144
原创 剑指offer24.反转链表
还是老规矩话不多说直接上代码:class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null, next; ListNode current = head; while(current != null){ next = current.next; current.next = pre;...
2021-08-11 20:17:02
50
原创 leetcode-413 等差数列划分
话不多说直接上代码:class Solution { public int numberOfArithmeticSlices(int[] nums) { if(nums.length<3){ return 0; } int continual=0; int count=0; for(int i = 2; i < nums.length; i++){
2021-08-10 16:08:22
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人