剑指offer
牛客网剑指offer
北渺
这个作者很懒,什么都没留下…
展开
-
剑指offer——不用加减乘除做加法
目录题目循环实现递归实现题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。循环实现实现思路1.计算num1和num2的无进位和,进位。2.如果进位不为0,则说明num1+num2的结果等于无进位和+进位,此时,把无进位和作为num1,进位作为num2,继续计算。3.如果进位等于0, 说明此时num1+num2的结果就等于无进位和,返回无进位和即可。代码public class Solution { public int Add(int num1,原创 2021-01-20 13:00:11 · 87 阅读 · 0 评论 -
剑指offer——二叉搜索树和双向链表
JZ26 二叉搜索树和双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题解1. 非递归思路模拟二叉树的中序遍历,在遍历时记录前驱节点,将中序遍历打印节点的操作改为转换节点指针指向。注意:对第一个节点和其前驱节点不进行调整,会出现空指针异常代码import java.util.Stack;/**public class TreeNode { int val = 0; TreeNode lef原创 2021-05-25 00:22:49 · 78 阅读 · 0 评论 -
剑指offer——替换空格
目录题目思路代码结果题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路将字符串转为一个字符数组,遍历数组找到“ ”换为“%20”,利用Java中StringBuilder的特点,将字符串重新拼接。代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规原创 2021-03-11 18:16:48 · 44 阅读 · 0 评论 -
剑指offer——链表中倒数第k个节点
目录题目题解题目输入一个链表,输出该链表中倒数第k个结点。题解思路代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindKthToTail(ListNode head,int k) {原创 2021-01-29 22:49:58 · 80 阅读 · 0 评论 -
剑指offer——连续子数组的最大和
写目录题目实现题目输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).实现思路1.最大子数组和初始化为array[0],子数组和初始化为02.计算子数组和3.判断子数组和与最大子数组和关系,如果子数组和>=最大子数组和 更新最大子数组和4.判断当前项与最大子数组和关系,如果子数组和<=array[i] 更新最大子数组和为 array[i]代码public class Solution {原创 2021-01-18 14:01:41 · 67 阅读 · 0 评论 -
剑指offer——斐波那契数列
目录题目循环递归优化递归题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39循环实现思路前两项已知,第3项=第2项+第1项,第4项=第3项+第2项,以此类推,向后递加即可。代码public class Solution { public int Fibonacci(int n) { //输入负数或0直接返回0 if(n <= 0){ ret原创 2021-01-14 00:10:58 · 68 阅读 · 1 评论 -
剑指offer——包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1) )题解思路在实现栈数据结构中,再加入一个一个最小值栈入栈操作时判断一下值与最小值栈顶的大小,如果小于最小值栈顶,则入最小值栈出栈操作时判断一下栈顶元素和最小值栈顶元素是否相等,相等则出最小值栈代码import java.util.Stack;public class Solution { private int[] array = new int[10];原创 2021-01-29 22:51:20 · 71 阅读 · 2 评论 -
剑指offer——二维数组中的查找
目录题目描述思路代码结果题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。思路基于二分的思想:非法输入处理特殊情况处理,targert<arra原创 2021-03-30 23:31:21 · 61 阅读 · 0 评论 -
剑指offer——矩形覆盖
目录题目思路代码结果题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路对于很多递归问题,我们都可以通过归纳总结来找出他们的规律:当n=1时,way=1(横或竖)当n=2时,way=2(全横或全竖)当n=3时,way=3(全竖&横横竖&竖横横)当n=4时,way=5(全竖&全横&竖横横竖&竖竖横横&横横竖竖)当n=5时,way=8(全竖&竖横横竖竖&原创 2021-03-04 19:57:29 · 79 阅读 · 1 评论 -
剑指offer——栈的压入、弹出序列
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题解思路直接模拟即可。因为弹出之前的值都会先入栈,所以这里用个栈来辅助。1.初始化:用指针pushIndex指向pushA的第一个位置, 指针popIndex指向popA的第一个位置2.先压栈原创 2021-01-29 11:49:25 · 67 阅读 · 0 评论 -
剑指offer——合并两个排序的链表
目录题目描述题解题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题解思路代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Merge(ListN原创 2021-01-27 11:30:11 · 66 阅读 · 0 评论 -
剑指offer——从尾到头打印链表
题目输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题解思路代码/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;import java.u原创 2021-02-11 15:58:48 · 58 阅读 · 1 评论 -
剑指offer——变态跳台阶
目录题目题解题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解思路:这是一道可以递归,记忆化递归,动态规划,递推思想的题目。跳1级:毫无疑问就1种跳法 j1 = 1跳2级:可以分为 先跳1级剩1级、跳2级两种情况,第一种情况先跳1级剩1级,那么跳法就为跳1级的跳法。 j2 = j1 + 1跳3级:可以分为 先跳1级2级、先跳2级剩1级、和跳3级三种情况,第一种情况先跳1级剩2级,那么跳法就为跳2级的跳法, 第二种情况原创 2021-01-23 15:25:54 · 70 阅读 · 0 评论 -
剑指offer——删除链表中的重复节点
目录题目描述思路代码结果题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路在遍历单链表的时候,记录当前节点的上个节点位置,并且检查当前节点与下一点是否为相同值,如果相同,当前节点继续向后遍历查找相同值的最大长度,然后指针改变指向,难点在于首节点重复节点删除,解决办法就是new个新节点将链表链在新节点上。时间复杂度原创 2021-04-19 12:16:08 · 337 阅读 · 0 评论 -
剑指offer——和为S的两个数字
目录题目思路代码结果题目输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路代码import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> arrayLi原创 2021-03-13 10:10:19 · 76 阅读 · 0 评论 -
牛客网剑指offer——Java题解
剑指offerJZ1 二维数组中的查找题目描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。0 <= array.length <=原创 2021-09-07 21:28:57 · 612 阅读 · 1 评论 -
剑指offer——链表中环的入口节点
目录题目思路代码结果题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路我们都知道如果链表有环用指针去遍历链表会进入环中,这是我们就可以考虑用双指针去判断链表是否有环,然后再借用数学中的追及相遇路程问题找到入口,下图是一个有环的链表,下面的思路以这个图来说明(本题中快指针只比慢指针多走一圈,实际情况也可能会有多几圈的情况)用快慢指针法,两个指针会在环中相遇,假设相遇点为C点,那么quick指针走的路程为s(quick)=AB+BC+CDB+BC,slow指针走的路原创 2021-03-26 13:06:59 · 66 阅读 · 0 评论 -
剑指offer——用两个栈实现一个队列
目录题目方法1方法2题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。方法1思路stack1作为主存,stack2作为出队时的辅助空间.入队操作:将元素直接添加到stack1出队操作:将stack1的元素全部移动到stack2,出队stack2的栈顶元素,再将stack2的元素全部移动到stack1实现public void push(int value) { stack1.push(value); } p原创 2021-01-20 12:55:04 · 117 阅读 · 1 评论