
剑指offer
hdu_xiaoming
鹅厂打工人。
展开
-
【每日一题】剑指 Offer 36. 二叉搜索树与双向链表
题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 原题比较长,可以去力扣看。大致题意是将二叉排序树转换成有序的双向循环链表。 思路 题目要求递增的循环链表,即按中序遍历二叉树。判断特殊情况,如果传入节点为空,则直接返回。记录下第一个节点为head。遍历过程中依次连接【前一节点】和【当前节点】。最后将head节点和尾节点连接,返回head节点即可。 代码 class Solution { Node head; publ原创 2020-07-27 11:12:45 · 345 阅读 · 0 评论 -
剑指offer解题汇总(2)
11. 旋转数组的最小数字 思路1:暴力。依次遍历一遍数组,碰到后一个元素小于前一个的,即为最小元素。 时间复杂度:O(n),空间复杂度O(1) 思路2:折半法。从中间将数组拆分,可以得到两个子数组,一个子数组是非递减的,一个自旋的数组(自旋数组的最后一个元素小于第一个数组)。还按照这种方式继续折半查找,直到最终数组只有两个值,小的那个即是最小值。 时间复杂度:O(log n),空间复杂度O(1) 注意: 有一种特殊情况,如果允许有相同的值出现,则可能会有左、中、右节点值相同的情况出现。此时无法判断哪边是旋原创 2020-07-16 20:51:09 · 180 阅读 · 0 评论 -
剑指offer解题汇总(1)
3. 数组中重复的数字 思路1:使用map存节点数据,然后依次遍历判断是否出现过。 时间复杂度:O(n),空间复杂度O(n) 思路2:交换法。因为是长度为n的数组,数字范围是0到n-1。遍历过程中发现下标为X的位置上存的数字是y(不等于x),则判断下标为Y的位置上是否存的是Y,如果是则出现重复,如果不是则交换两者数据。 时间复杂度:O(n),空间复杂度O(1) 4. 二维数组中的查找 思路1:暴力遍历整个二维数组,判断是否与目标值相同。 时间复杂度:O(n^2),空间复杂度O(1) 思路2:从二维数组左下角原创 2020-07-16 16:20:20 · 175 阅读 · 0 评论