剑指offer
MaoziShan
这个作者很懒,什么都没留下…
展开
-
13-包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。Me俺不会……困惑点:如何使min和data的pop保持一致。题解使用冗余解决我的困惑点,即使min和data的长度保持一致。import java.util.Stack;public class Solution { Stack<Integer> date = new Stack<>(); Stack<Integer> min原创 2021-04-08 13:24:52 · 105 阅读 · 2 评论 -
12-字符串分隔
题目描述• 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;• 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入多次,每个字符串长度小于100)输出描述:输出到长度为8的新字符串数组Mepublic static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { St原创 2021-04-08 13:23:15 · 137 阅读 · 2 评论 -
11-明明的随机数
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。当没有新的输入时,说明输入结束。输入描述:原创 2021-04-08 13:22:31 · 202 阅读 · 1 评论 -
10-计算某字母出现次数
题目描述写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写。输入描述:第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。输出描述:输出输入字符串中含有该字符的个数。Me使用了双指针的思想,前后两指针夹击字符串序列。public static void main(String[] args) { Scanner in = new Scanner(System.in); String a =原创 2021-04-08 13:21:57 · 187 阅读 · 1 评论 -
9-字符串最后一个单词的长度
题目描述计算字符串最后一个单词的长度,单词以空格隔开。输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。Me使用系统函数。public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] s = sc.nextLine().split(" "); System.o原创 2021-04-08 13:21:22 · 159 阅读 · 3 评论 -
8-连续非负整数
题目描述给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N。答案可能有多个,我们需要找出长度最小的那个。例如 N = 18 L = 2:5 + 6 + 7 = 183 + 4 + 5 + 6 = 18都是满足要求的,但是我们输出更短的 5 6 7 。Me主要使用了队列的思想,绕了一大圈还运行超时……import java.util.Scanner;public class Main { public static void main(String[]原创 2021-04-08 13:20:47 · 402 阅读 · 3 评论 -
6-重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。此题的重建二叉树的意思是还原二叉树并返回root节点。Me使用规则:中序遍历的i位值如果等于前序遍历的首位值,那么中序遍历的i位左侧为左子树,i位右侧为右子树,前序遍历i位左侧为左子树(去掉首位根节点),i位右侧为右子树public TreeNode reC原创 2021-04-08 13:19:41 · 141 阅读 · 0 评论 -
5-数组中只出现一次的两个数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。Me第一次用python完成题目,太简单了,简直让人想放过自己!泪目????。但是!可以明显看出,python封装性太强,并不利于我们了解数据结构的底层结构。因此还是老老实实地用Java吧……class Solution: def FindNumsAppearOnce(self , array ): # write code here d = {}原创 2021-03-28 20:38:06 · 151 阅读 · 0 评论 -
4-链表倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。Me我的实现思路为:通过一次完全遍历获取链表长度,根据长度于k的差值定位倒数第k个节点。这个思路很好想,也很难优化。public ListNode FindKthToTail (ListNode pHead, int k) { if (k == 0) return null; ArrayList<ListNode> arr = new ArrayList<ListNode>();原创 2021-03-28 20:37:08 · 157 阅读 · 0 评论 -
3-用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node)原创 2021-03-28 20:36:37 · 111 阅读 · 0 评论 -
2-树的子结构
题目描述输入两棵二叉树A和B,判断B是不是A的子结构(约定空树不是任意一个树的子结构)。B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。Me主要使用递归的方法。该题有两种指针移动:主树和子树当前节点值不同,主树指针下移,子树指针不动——HasSubtree;主树和子树当前节点值相同原创 2021-03-28 20:36:03 · 122 阅读 · 0 评论 -
1-最小的k个数
题目描述输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。这是标注为“简单”的一道题目,但是题解版本很多,涉及的点也很深很全(菜鸟本菜),因此记录下自己的学习过程。Me我的解题思路是使用冒泡排序算法,具体代码如下:class Solution { public int[] getLeastNumbers(int[] arr, int k) { int [] result = new int原创 2021-03-28 20:35:31 · 177 阅读 · 0 评论