简单

https://leetcode-cn.com/problems/decode-xored-array/
未知 整数数组 arr 由 n 个非负整数组成。
经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。
给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。
请解码返回原数组 arr 。可以证明答案存在并且是唯一的。

示例 1:
输入:encoded = [1,2,3], first = 1
输出:[1,0,2,1]
解释:若 arr = [1,0,2,1] ,那么 first = 1 且 encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]

示例 2:
输入:encoded = [6,2,7,3], first = 4
输出:[4,2,0,7,4]

思路:

a xor b = c,c 随便 xor a 或者 b 就会求得另一个。
直接通过已知按顺序xor回去就好了。


中等

https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/
在一个 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 = 5,返回 true。
给定 target = 20,返回 false。

思路:

两种解法很直观
解法一:线性搜索
2021年5月6日 - 图1
按照“树”搜索得到。

解法二:二分排除
2021年5月6日 - 图2
2021年5月6日 - 图3

2021年5月6日 - 图4
交替在横向纵向二分查找,找到较小的位置。
一次可以排除黄色区域和蓝色区域,不断迭代就可以找到目标。


困难

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

进阶:

  1. 你可以设计一个只使用常数额外空间的算法来解决此问题吗?
  2. 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

示例 2:
输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]

示例 3:
输入:head = [1,2,3,4,5], k = 1
输出:[1,2,3,4,5]

示例 4:
输入:head = [1], k = 1
输出:[1]

思路

要反转一个单向链表,不考虑语法糖,至少需要三个指针。
实现一个给定一个头指针,一个尾指针,反转 头指针的下一个结点到尾指针结点的链表 的函数。
剩下随便反转。


代码

https://gitee.com/graywolf_lv/daily_leetcode/tree/2021%2F5%2F6/src