持续更 (此贴只记录需要掌握的知识点,不贴代码)

JZ1 旋转数组中的最小元素

根据旋转数组的性质,问题可以转化为对两个顺序数组分界点的寻找
①暴力法:
1.从下标为0的元素开始遍历
2.每次进行比较,如果当前元素比相邻的下一个元素小,则对应的下一个元素为最小值(一般情况)
3.如果查找到最后一个元素都没有出现2这种情况,则下标为0是最小元素(特殊情况:所有元素都一样)
②二分法
二分法适用的关键:
一般二分查找的要求(顺序存储、元素有序)
原因(通过下标即可以得到关键字,任取一个关键字的值可以确定所选择关键字是在他的前面还是后面)
整体思路:
因为题目描述“把一个数组最开始的若干个元素搬到数组的末尾”. 所以我们里层的判断条件是判断nums[mid]和nums[end]的关系:
如果nums[mid] > nums[end], 说明最小值还在nums[mid]的右边;
如果nums[mid] < nums[end], 说明最小值在mid或mid的左边;
如果nums[mid] == nums[end], 有重复数字的旋转数组,会出现这种的情况;我们并不能确定分界线出现在mid的前面还是后面,所以直接暴力缩短右边界。

细节,注意下标变化
一般二分查找:left = mid+1/right = mid -1,原因:确定mid所指元素并非查找元素,所以下标变化取决于索引所指元素是否可能是查找元素。

JZ2 从尾到头打印链表

这道题整体不难,然后
有三种思路,第一就是利用栈先入后出的特性完成,第二就是存下来然后进行数组翻转。第三是利用递归。
最佳代码:代码思路借助栈,遍历的时候入栈,由于数据结构中栈的特点是先进后出,所以遍历的过程中压栈,推栈,完了弹栈加到ArrayList中。

有两个容易出错的地方:第一,第一次测试用例{}返回[],null是null,而[]是new ArrayList()但是没有数据。第二,遍历stack用的方法是
!stak.isEmpty()方法,而不是for循环size遍历。
另外,python 字符翻转的三种方法:L[::-1]、list(reversed(L))(reversed(L)不返回列表)、L.reverse()。

高效刷题贴

相关文章:

  • 2022-12-23
  • 2021-10-24
  • 2021-12-25
  • 2021-12-06
  • 2021-11-30
  • 2021-12-28
  • 2022-12-23
猜你喜欢
  • 2021-12-15
  • 2022-12-23
  • 2022-01-09
  • 2022-03-10
  • 2022-01-11
  • 2022-12-23
  • 2021-06-04
相关资源
相似解决方案