剑指offer11~20题

11. 旋转数组的最小数字

题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路:
题目中的“非减”的意思就是说前一个数要小于或者等于后一个数,不要理解成“非递减”了。
二分法思想:
在一个有序数组中查找一个元素可以用二分查找,二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度都为 O(logN)。

本题可以修改二分查找算法进行求解:

当 nums[m] <= nums[h] 的情况下,说明解在 [l, m] 之间,此时令 h = m;
否则解在 [m + 1, h] 之间,令 l = m + 1。
在这里插入图片描述
上面的解法如果遇到一个特殊情况还是可能会出问题,例如对于数组 {1,1,1,0,1},满足nums[l] == nums[m] == nums[h],l、m 和 h 指向的数都为 1,此时无法知道最小数字 0 在哪个区间。(解释:相当于右边的逐渐向上的最高峰等于左边的逐渐向上的最高峰这种特殊情况时)
在这里插入图片描述

12. 矩阵中的路径(笔者对这个题也有一些疑问)

题目描述:
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。(解释:只要存在这样的路径包含我们输入的字符串全部字符,就说明存在,否则不存在)路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。

例如下面的矩阵包含了一条 bfce 路径。
在这里插入图片描述
详情参考:
https://github.com/CyC2018/CS-Notes/blob/master/notes/剑指 offer 题解.md#12-矩阵中的路径

猜你喜欢

转载自blog.csdn.net/qq_40241957/article/details/84886408