![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
辰星l
喜欢折腾的码农
展开
-
调整数组顺序使奇数位于偶数前面
????调整数组顺序使奇数位于偶数前面题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于偶数数组的后半部分实现思路遍历数组,计算出数组奇数的数量,确定偶数存放起始位置,申请一个新的数组,遍历原数组,将奇数放入奇数索引位置,偶数放入偶数索引位置,空间复杂度O(n),时间复杂度O(n)使用冒泡法,将偶数冒泡到最右边,时间复杂度O(N^2),空间复杂度O(1)使用双指针思想,首尾指针为p1, p2,如果 p1 < p2;循环,arr[p1]为奇数,p1++;循原创 2020-08-12 00:25:40 · 139 阅读 · 0 评论 -
删除链表的节点
????删除链表的节点题目:在O(1)时间内删除链表节点,给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。实现思路:首先判断给定的删除节点是否最后一个节点如果不是最后一个节点,可以将要删除节点的下一个节点值赋给给定的删除节点,将给定的删除节点指向下下个节点,时间复杂度为O(1)如果是最后一个节点,那么就必须进行遍历,此时分两种情况:如果链表只有一个节点,那么直接将头结点置为null,时间复杂度为0(1)进行遍历,找到要删除节点的前一个节点,将前一个节点的下一原创 2020-08-09 21:47:16 · 150 阅读 · 0 评论 -
数组的整数次方
????数组的整数次方题目:实现函数double power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题具体实现思路base,exponent在数学上是没有意义的,需要讨论,如果都为0怎么处理判断exponent是否为0,为0的情况下,返回0判断exponent是否为1,为1的情况下,返回base判断exponent是否为-1,使用布尔类型变量表示,先将exponent置为正数,求出base的exponen原创 2020-08-08 22:38:34 · 133 阅读 · 0 评论 -
旋转数组的最小数字
旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如,数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1解题思路解法一:直接遍历数组,时间复杂度为O(N)解法二:先将数组进行排序,取第一个元素即为所求的解法三:使用二分法如果数组是{1, 2, 3, 4, 5},那么该数组已经是有序的,直接第一个就是要找的元素如果数组是{3, 4, 5, 1,原创 2020-08-05 22:07:18 · 84 阅读 · 0 评论 -
斐波那契数列
斐波那契数列写一个函数,输入n.求斐波那契数列的第N项斐波那契的定义如下f(n) =0, n = 0f(n) = 1, n = 1f(n) = f(n-1) + f(n-2), n > 1具体思路可以使用递归的方式求解,当n=0或者n = 1的时候,返回n,否则递归调用即可,存在重复计算,当N大的时候,非常耗时使用迭代的方式求解,当n=0或者n=1的时候,返回n,其余按照前两项和相加,当N大的时候,耗时短递归求解代码简洁易懂,但是耗时长public class Solu原创 2020-08-04 22:20:41 · 160 阅读 · 0 评论 -
用两个栈实现队列
???? 用两个栈实现队列用两个栈实现一个队列实现思路:首先栈是先进后出的,队列是先进先出的1、使用两个栈A、B,先将元素从栈A弹出放入栈B中,再从栈B中取出元素,分两种情况讨论如果栈B没有元素,需要一次性将栈A中的全部元素放入栈B中,再从栈B中弹出元素如果栈B中有元素,那么直接从栈B中弹出public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Int原创 2020-08-04 22:03:26 · 88 阅读 · 0 评论 -
二叉树的下一个节点
剑指Offer8???? 二叉树的下一个节点给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针前序遍历:先访问根节点,再访问左节点,最后访问右节点 简称:根左右中序遍历:先访问左节点,再访问根节点,最后访问右节点 简称:左根右后序遍历:先访问左节点,再访问右节点,最后访问右节点 简称:左右根具体实现思路如果查找的节点包含右子树,则右子树的最左边的节点就是下一个节点如果查找的节点右子树为空,原创 2020-08-03 22:34:38 · 137 阅读 · 0 评论 -
从尾到头打印链表
从尾到头打印链表输入一个链表的头节点,从尾到头反过来打印出每个节点的值具体思路:解法一:1 .首先想到数据结构是栈,符合后进先出2 . 将节点的值放入Stack中3 .之后将stack中的值pop出来放入ArrayList集合中4 . 返回的集合中的值就是反转后的值解法二1.递归实现,递归本身就是栈结构解法一代码public ArrayList<Intege...原创 2019-04-06 18:53:54 · 96 阅读 · 0 评论 -
替换字符串
替换字符串题目描述:请实现一个函数,将一个字符串中的每个空格替换成 %20。例如,当字符串为 We Are Happy,则经过替换之后的字符串为 We%20Are%20Happy。具体思路:1 .遍历原字符串,遇到空格,则在原字符串末尾append两个空格2 .使用指针p指向原字符串末尾,指针q指向现字符串末尾3 . p,q同时从后向前遍历,当p指向空格是,q指针添加%20,若不是...原创 2019-04-06 18:23:30 · 110 阅读 · 0 评论 -
剑指Offer3
剑指offer 3题目描述:在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。解题思路:方法一先排序,之后顺序扫描判断是否右重复,时间复杂度为O(n^2)方法二,时间复杂度为O(n)长度为n,元素的范围也为0~n,如果没有重复元素,则n下标的值也等...原创 2019-03-31 20:32:43 · 136 阅读 · 0 评论