![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
初遇见
在你选择的道路上,坚持走下去,时间总会给你答案
展开
-
剑指offer 09 -用两个栈实现队列
题目描述 栈的特点是:先进后出,队列的特点是先进先出,用两个栈来模拟的话,第一个栈用来存储数据,比如数据1,2,3。 第二步判断栈2是否为空,如果为空把栈1中数据添加到栈2里 最后一步把栈2中的数据取出,还是1,2,3的顺序,这样就实现了两个栈来模拟一个队列,可以看成的负负得正 class CQueue { Stack <Integer> s1; Stack <Integer> s2; int size = 0; //构造函数 publ原创 2021-08-14 18:38:13 · 64 阅读 · 0 评论 -
剑指offer04.二维数组中的查找-java
题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 和搜索二维矩阵II类似,二维数组的特点:从左到右递增顺序排序,每一个列从上到下递增顺序排列,我们观察二维数组可以发现左下角和右上角的元素比较特别,这里用左下角元素,左下角元素的特点,是这个列中最大的,是这个行中最小的。 用左下角元素和目标数进行比较: 1)如果左下角的元素大于目标数,说明目标数一定位于原创 2021-05-05 20:41:40 · 107 阅读 · 0 评论 -
剑指offer57-和为s的两个数字
题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 思路: 数组是递增有序的,可以用双指针的做法。 定义两个指针,一个指向数组的第一个元素,另一个指向数组的最后一个元素,然后求和,如果和大,第二个指针像前移动,如果和小,第二个指针像后移动。如果相等,返回两个数字是一个一维数组,如果没找到返回null. class Solution { public int[] twoSum(int[] nums, int targ原创 2021-04-21 20:58:25 · 47 阅读 · 0 评论 -
剑指offer-数组中的重复元素-java(原地置换,set集合)
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。 方法1:用set集合 set集合的特点是去重,如果set集合中包含这个元素,返回重复元素,否则把元素填加到set集合中。 class Solution { public int findRepeatNumb原创 2021-03-28 12:09:11 · 190 阅读 · 0 评论 -
剑指offer-II左旋转字符串-java实现
题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 思路 遍历拼接 创建一个动态字符数组StringBuffer 起名为res 像res中添加 n+ 1 ~ 字符串末尾的字符 在像res中添加首位到n的字符 最后转换成字符串输出。 反转成功。 class Solution { public String reverseLe原创 2021-03-26 21:28:52 · 91 阅读 · 0 评论 -
剑指offer面试题55-I-二叉树的深度(java)
题目描述 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 方法 后序遍历 — 递归 这道题的关键点在于 这个树的深度和左子树,右子树深度之间的关系 算法步骤 如果根节点不存在,说明树不存在,深度为0,返回0. 然后递归算左子树的深度,在递归算右子树的深度 最后返回左子树深度和右子树深度的最大值在+1 class Solution { public int maxDepth(TreeNode root) {原创 2021-02-19 21:10:51 · 109 阅读 · 0 评论 -
剑指offer面试题39【数组中出现次数超过一半的数字】-java
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 示例1 输入 [1,2,3,2,2,2,5,4,2] 返回值 2 方法–摩尔投票法–>有点像消消乐 我们给候选人起一个名叫ans,初始化为nums[0],票数起名为count初始化为1 当我们遇到把票投给候选人的,也就是和候选人相同是数,票数+1,否则票数-1 假如没有人投票给候选人原创 2021-02-17 21:53:26 · 118 阅读 · 0 评论 -
剑指offer面试题5-替换空格-java
题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” 思路 因为字符串是用final定义的是不可变的,所以我们需要定义一个新的对象, ...原创 2021-02-16 09:33:54 · 75 阅读 · 1 评论 -
剑指offer-二进制中1的个数-java
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。 思路 如果一个整数不为0,那么整个整数至少有一位是1,如果我们把这个数减1,那么这个数最右面的1就会变成0,原来1后面的0都原创 2021-02-14 21:56:42 · 76 阅读 · 0 评论 -
剑指offer-链表中倒数第K个结点-java
题目描述 输入一个链表,输出该链表中倒数第k个结点。 输入 1,{1,2,3,4,5} 返回值 {5} 想法: 做法一: 第一时间想到的做法是先遍历一遍链表统计链表的长度计为n 在设置一个指针走(n-k)步,就可以找到链表倒数第k个结点 但是这种做法需要遍历链表两次 第一次统计链表中结点的个数,第二次找到倒数第k个结点,时间复杂度高 除了这个还有这个时间复杂度低的做法 做法二 双指针 使用双指针就可以不用统计链表的长度 准备一个前指针first和一个后指针later,都指向链表的头结点head 让后指针先走原创 2021-02-14 20:59:14 · 95 阅读 · 0 评论 -
剑指offer面试题25:合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 示例1 输入 {1,3,5},{2,4,6} 返回值 {1,2,3,4,5,6} 空链表要单独判断 第一个链表是空链表,把它和第二个链表合并,显然和并的结果就是第二个链表 第二个链表是空链表,把它和第一个链表合并,显然和并的结果就是第一个链表 如果两个链表都是空链表返回null 用两个指针,第一个指针放在第一个链表的头结点 另一个指针,放在第二个链表的头结点,然后比较谁小放谁 新链表的头结点就是原来两个链原创 2021-02-11 11:13:41 · 94 阅读 · 2 评论