461. 汉明距离——hamming-distance两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
示例 1:
1234567输入:x = 1, y = 4输出:2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。
示例 2:
12输入:x = 3, y = 1输出:1
提示:
0 <= x, y <= 231 - 1
这种题没见过,直接学
前言汉明距离广泛应用于多个领域。在编码理论中用于错误检测,在信息论中量化字符串之间的差异。
两个整数之间的汉明距离是对应位置上数字不同的位数。
根据以上定义,我们使用异或运算,记为 ⊕,当且仅当输入位不同时输出为 1。
计算 x 和 y 之间的汉明距离,可以先计算 x⊕y,然后统计结果中等于 1 的位数。
现在,原始问题转换为位计数问题。位计数有多种思路,将在下面的方法中介绍。
方法一:内置位计数功能思路及算法
大多数编程语言都内置了计算二进制表达中 1 的数量的函 ...
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 HashSe ...
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] = nums[ ...
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 addT ...
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 元 / 份(无 ...


