
剑指offer题解
冲冲冲,RushCode
江璇Up
公众号【江璇Up】我把我学会的讲给你听
展开
-
面试题27. 二叉树的镜像
问题:面试题27. 二叉树的镜像思路:说白了就是一个交换操作,可以理解为两个数交换位置;借助一个中间的变量,递归对子树进行操作;实现:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */clas原创 2021-01-30 20:59:52 · 131 阅读 · 0 评论 -
面试题22. 链表中倒数第k个节点
题目面试题22. 链表中倒数第k个节点思路这个题目有点太简单了,两次循环,一次得到链表的长度;第二次求出需要返回元素的正序索引,再次遍历,实现public ListNode getKthFromEnd(ListNode head, int k) { if (head == null) return null; int len = 0; ListNode node = head; while (head.next != null原创 2020-05-20 22:34:10 · 201 阅读 · 0 评论 -
面试题21. 调整数组顺序使奇数位于偶数前面
题目面试题21. 调整数组顺序使奇数位于偶数前面思路双指针法,两个指针,一个从数组的头部开始,一个从数组的尾部开始。若头部指针指向的当前数据为奇数,那么向后移动指针,直到遇到不满足的情况;尾指针向前移动,若当前尾指针指向的元素不满足;交换两指针指向的元素。实现class Solution { public int[] exchange(int[] nums) { int len = nums.length - 1; int left = 0;原创 2020-05-20 22:08:57 · 313 阅读 · 0 评论 -
面试题15. 二进制中1的个数
题目:面试题15. 二进制中1的个数思路:可以使用字符串思维解题,先把这个二进制数看成一串字符串,然后统计该字符串中 ” 1 “ 出现的频率即可。使用二进制数的移位和 与运算每次对该二进制数的最后一个数字进行处理,首先我们需要知道一个运算:任何一个二进制数与 1 进行与运算,只要这个 二进制数的最后一位数是 1 那么运算的结果就是 1 。否则为 0 ;对二进制数进行 与 1 运...原创 2020-05-07 17:34:09 · 188 阅读 · 0 评论 -
面试题11. 旋转数组的最小数字
题目:面试题11. 旋转数组的最小数字思路:原始数组递增有序,经过一定的位移后得到现在的数组。需要找到数组中最小的元素,方法一:定义一个变量保存数组的第一个元素,顺序遍历数组,若存在后面的元素比当前元素小,那么说明后面的元素是最小的元素。方法二:原基础顺序遍历查找效率较低,因此可以使用二分查找优化实现:class Solution { //...原创 2020-05-01 20:21:22 · 219 阅读 · 1 评论 -
面试题10- II. 青蛙跳台阶问题
问题:面试题10- II. 青蛙跳台阶问题思路:简化思维,就是简单的递归方程,求 n 就是就 斐波那契函数 f(n) 的值,可用 递归方式求解,但是应该会超时;动态规划解法:dp[ 0 ] = 1 ; dp [ 1 ] = 1 ; dp [ i ] = dp [ i-1 ] + dp [ i -2 ] ;注意取模具体可以参考这一题的解法 面试题10- I. 斐波那契数列【L...原创 2020-05-01 17:39:31 · 440 阅读 · 0 评论 -
面试题10- I. 斐波那契数列【LeetCode剑指offer】
问题:面试题10- I. 斐波那契数列思路:在这里我的第一想法是使用递归,两行代码提交,直接超时,无法通过,仔细一想,确实递归的性能并不是很好的。非递归解法:for循环,递归的逆过程,数组规律:1 1 2 3 5 8 13 ... 下一个数字等于前面两个数字的和定义一个式子: sum = a + b ; (a = 0,b=1 )循环赋值:a = b, b = sum ;...原创 2020-05-01 17:31:07 · 392 阅读 · 0 评论 -
面试题09. 用两个栈实现队列【LeetCode剑指offer】
题目:面试题09. 用两个栈实现队列思路两个栈,一个size(队列中数据的数量)入队列直接压入栈1,并且size++;出队列时,先判断size是否为0,若size 为 0,则说明队列空,返回-1;否则直接取出栈2的栈顶元素,若栈2为空,则把栈1 的所有元素一次性出栈压入栈2,此时栈2,按顺序弹出则是队列出队列的顺序,先进先出;出队列时,要相应的的size–;实现:class ...原创 2020-05-01 14:26:00 · 662 阅读 · 0 评论 -
面试题07. 重建二叉树【LeetCode剑指offer】
题目:面试题07. 重建二叉树思路:要明白先序遍历和中序遍历的具体顺序,先找到先序遍历的第一个元素,然后再去中序遍历里面查找这个元素,得到这个元素在中序的索引,那么,在中序数组中,这个元素前面的元素都是这个元素的左子树结点,这个元素的右边都是这个元素的右子树结点。对这个元素的左子树结点数组进行递归,对这个元素的右子树结点数组进行递归。实现:/** * Definition ...原创 2020-05-01 11:02:45 · 344 阅读 · 0 评论 -
面试题06. 从尾到头打印链表【LeetCode剑指offer】
题目:面试题06. 从尾到头打印链表思路:两次遍历链表,第一次得到链表的 length ;定义一个返回数组,长度为 链表的 length ;为数组反向赋值,赋值完成,也就将链表反向存储到数组中。实现:/** * Definition for singly-linked list. * public class ListNode { * int val; * ...原创 2020-05-01 10:24:22 · 491 阅读 · 0 评论 -
面试题05. 替换空格【LeetCode剑指offer】
题目:面试题05. 替换空格思路:思路一:使用一个额外的字符串在存放修改后的字符串,遍历这个字符串,遇到空格就将当前的空格进行转换,并将转换后的字符拼接后保存在额外的字符串中。缺陷:在Java中 String 是一个final修饰的,不可改变的,所以每次在原有的String 字符串后追加新的字符时候,等于在堆内存中新建了一个 String 对象,然后再保存到 字符串常量池中。所以...原创 2020-05-01 10:15:01 · 419 阅读 · 0 评论 -
面试题04. 二维数组中的查找【LeetCode剑指offer题解】
题目:面试题04. 二维数组中的查找思路:二维数组是有序的数组,从左向右递增,从上到下递增,所以只要比较每一行的最后一个数字,只要最后一个数字比当前数字小,那么直接跳过(剪枝)这一行;若某一行的最后一个数字恰好是要找的target,那么直接返回true;若最后一个数字比当前数字大,接着就看这一行的第一个数字,若第一个数字小于target,就说明要找的数字可能在这一行中,那么就对这一行进行...原创 2020-05-01 09:50:15 · 349 阅读 · 0 评论 -
面试题03. 数组中重复的数字【LeetCode剑指offer题解】
题目:面试题03. 数组中重复的数字本题考查的知识点是:数组、哈希表思路:思路一:使用数据结构哈希表 Set 来实现。题目要求只找到任意一个重复的数字即可。在向set中添加元素时,set会对已有的元素进行对比,若已经存在相同元素,那么久返回false。思路二:自定义一个哈希表结构进行存储,在插入哈希表时对已有元素进行判断优势:相对线性表的查找要更加的迅速,哈希查找,不需要经过遍...原创 2020-05-01 09:35:21 · 303 阅读 · 0 评论