448. 找到所有数组中消失的数字——find-all-numbers-disappeared-in-an-array给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
示例 1:
12输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]
示例 2:
12输入:nums = [1,1]输出:[2]
提示:
n == nums.length
1 <= n <= 105
1 <= nums[i] <= n
我的正确答案
将1-n先存放进哈希表,把有的删掉,没有的就是消失的数字
1234567891011121314151617181920class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { Set<Integer> set = new Hash ...
338. 比特位计数counting-bits给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
示例 1:
123456输入:n = 2输出:[0,1,1]解释:0 --> 01 --> 12 --> 10
示例 2:
123456789输入:n = 5输出:[0,1,1,2,1,2]解释:0 --> 01 --> 12 --> 103 --> 114 --> 1005 --> 101
提示:
0 <= n <= 105
此题没有见过,直接学习
(有相应的内置函数用于计算给定的整数的二进制表示中的 1 的数目,例如Integer.bitCount)
要解决这个问题,我们需要计算从 0 到 n 的每个整数的二进制表示中 1 的个数,并返回一个包含这些计数的数组。可以利用动态规划结合二进制数的特性高效求解,避免对每个数单独计算(时间复杂度可优化到 O(n))。
核心思路:利用二进制数的奇偶性 ...
283. 移动零move-zeroes给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
12输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]
示例 2:
12输入: nums = [0]输出: [0]
提示:
1 <= nums.length <= 14
-231 <= nums[i] <= 231 - 1
我的正确答案
将非零的依次往前挪,剩的用0补全
1234567891011121314class Solution { public void moveZeroes(int[] nums) { int curr = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[curr] = num ...
234. 回文链表——palindrome-linked-list给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例 1:
12输入:head = [1,2,2,1]输出:true
示例 2:
12输入:head = [1,2]输出:false
提示:
链表中节点数目在范围[1, 105] 内
0 <= Node.val <= 9
我的正确答案快慢指针找中点 + 栈存前半部分
123456789101112131415161718192021222324252627282930class Solution { public boolean isPalindrome(ListNode head) { if (head == null) return true; // 空链表是回文 ListNode fast = head; ListNode slow = head; Deque<Integer> ...
226. 翻转二叉树——invert-binary-tree给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
12输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]
示例 2:
12输入:root = [2,1,3]输出:[2,3,1]
示例 3:
12输入:root = []输出:[]
提示:
树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100
方法:递归思路与算法
这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。
代码
123456789101112class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { ...
206. 反转链表——reverse-linked-list给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
12输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]
示例 2:
12输入:head = [1,2]输出:[2,1]
示例 3:
12输入:head = []输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
我的答案
不到一分钟就写出来了,说明之前写数据结构C++的PTA作业还是有用的
1234567891011121314class Solution { public ListNode reverseList(ListNode head) { ListNode curr = head; ListNode prev = null; ListNode next = null; while (curr != null) { ...
169. 多数元素——majority-element给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
12输入:nums = [3,2,3]输出:3
示例 2:
12输入:nums = [2,2,1,1,1,2,2]输出:2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
输入保证数组中一定有一个多数元素。
这题我想到的是既然既要存数字又要存出现次数,肯定得用一个类封装一下,里面有数字的值和出现次数:
我的错误代码(写不下去了)123456789101112131415161718192021class elem { int appearTime = 0; int num; elem(int num) { this.num = num; } void ad ...
title: (LeetCodeHot100)141. 环形链表——linked-list-cycledate: 2025-11-12 19:40:00categories:
算法题解tags:
算法
Java
LeetCode
Hash
链表
双指针
快慢指针
160. 相交链表——intersection-of-two-linked-lists给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
自定义评测:
评测系统 的输入如下(你设计的程序 不适用 此输入):
intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
listA - 第一个链表
listB - 第二个链表
skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数
评测系统 ...
生活——Life
未读塔斯汀团购券单价分析 & 最优购买方案以下是我买的塔斯汀中国汉堡的团购卷(用作分析)
1234567891018.12元:两个汉堡三个鸡块一个鸡腿 10.32元:一个汉堡三个鸡块一个鸡腿 19.01元:两个汉堡+三拼小食盒(三个鸡块一个鸡腿一份鸡米花) 18.51元:一个汉堡六个鸡腿 16.9元:一个汉堡一个鸡腿一份粗薯一杯可乐 11.9元:一份粗薯+三拼小食盒(三个鸡块一个鸡腿一份鸡米花) 10.6元:一个汉堡+三拼小食盒(三个鸡块一个鸡腿一份鸡米花) 18.9元:一个汉堡一个鸡腿三个鸡块一份粗薯一杯可乐 12.9元:两个汉堡 16.9元:一个汉堡三个鸡块一个鸡腿一杯可乐
一、核心单品单价拆解(基准参考)先通过纯单品 / 极简套餐锁定核心单品 “地板价”,再横向对比所有组合:
汉堡(H):最低单价来自「套餐 9(12.9 元 = 2 汉堡)」→ 6.45 元 / 个(所有套餐中汉堡单价最低,无溢价)
三拼小食盒(S=3 鸡块 + 1 鸡腿 + 1 鸡米花):最低单价来自「套餐 7/6」→ 4.15 元 / 份(无溢价)
鸡腿(L):最低单价来自「套餐 4(18.51 元 ...
141. 环形链表——linked-list-cycle给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
示例 1:
123输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
123输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
123输入:head = [1], pos = -1输出:false解释:链表中没有环。
提示:
链表中节点的数目范围是 [0, 104]
-105 <= Node.val <= 105
pos 为 -1 或者链表中的一个 有效索引 。
我的正确答案 ...


