
剑指Offer
Skydddd
这个作者很懒,什么都没留下…
展开
-
剑指Offer(6):两个栈实现队列
class CQueue { Stack<Integer> s1 ; Stack<Integer> s2 ; public CQueue() { s1 = new Stack<>(); s2 = new Stack<>(); } public void appendTail(int...原创 2020-02-29 01:33:23 · 138 阅读 · 0 评论 -
剑指Offer(5):从头到尾打印链表
栈/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ import java.util.*;class Solution { pu...原创 2020-02-29 00:56:02 · 177 阅读 · 0 评论 -
剑指Offer(4):重建二叉树
题目链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/此题关键点在于找到前序0号元(根节点)在中序中的下标,借此将中序分为左子树和右子树,再遍历。可以for循环+break每次从头找,要注意Array.copy系列API的用法,左开右闭或者用hashmap存中序/** * Definition for ...原创 2020-02-28 22:11:56 · 171 阅读 · 0 评论 -
剑指offer(3):替换字符
题目:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/class Solution { public String replaceSpace(String s) { int count = 0; //字符串不能遍历,字符数组才行 for(char c : s.toCharArr...原创 2020-02-21 22:20:34 · 139 阅读 · 0 评论 -
剑指offer:二维数组中的查找
题目:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/和右上角去比,不匹配然后砍掉一列或者一行注意是个while循环class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { ...原创 2020-02-21 18:22:25 · 165 阅读 · 0 评论 -
剑指offer(1):数组中重复的数字
题目描述:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/这种题两种做法,占坑法和哈希法,时间复杂度都为O(n),空间复杂度前者为O(1),后者为O(n)下面代码为不考数字虑越界情况,若考虑有非法数字,单独遍历一次判断,不能放到主循环里。占坑法:需要不停交换特定两个数,注意,java里的交换...原创 2020-02-21 16:20:46 · 143 阅读 · 0 评论 -
[链表]找出两个链表第一个公共节点
标签:链表,hash题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路一种方法是用 hashmap来存储和查找节点;另一种方法是双指针法。注意复习HashSet和HashMap的插入查询等用法!另一种就是著名的快慢指针法。在牛客网上找了个好理解的解释:第一步,找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二...原创 2019-05-29 22:37:34 · 298 阅读 · 0 评论 -
[链表]合并两个有序链表
标签:链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路两种解法:递归和非递归递归:注意递归终止条件,还有递归方向,其实很好想,不要钻牛角尖非递归解法第一个是我自己写的,很冗余,第二个是别人精简的代码,忘借鉴我一开始的思路是,分list1 < list2和list1 >= list2,但又考虑到可能list1...原创 2019-05-22 17:43:27 · 224 阅读 · 0 评论 -
[数组]把数组排成最小的数
标签:数组,字符串,排序题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路第一想法是将整数数组是我数都化为字符串,然后对首字母排序,关于两个字符串的默认排序,参见这篇文章Java中两个字符串如何比较大小,总结下就是先比较首字母ascll码,不等的话...原创 2019-05-21 22:06:10 · 249 阅读 · 0 评论 -
[数组]从外向里打印矩阵
标签:数组题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路先得到矩阵的行和列数,然后依次旋转打印数据,一次旋转打印结束后,往对角分别前进和后退一个单位。要注意单行...原创 2019-05-21 17:36:26 · 387 阅读 · 0 评论 -
[数组]二维数组中的查找
标签:数组题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数解题思路二维数组是有序的,从右上角来看,向左数字递减,向下数字递增。因此从右上角开始查找,当要查找数字比右上角数字大时,下移;当要查找数字比右上角数字小时,左移;如果出了边界,...原创 2019-05-21 17:35:04 · 185 阅读 · 0 评论 -
[链表]从后向前打印链表
标签:链表题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路1、一种方法是利用栈来实现,注意Stack的用法;2、另外一种方法是利用三个指针把链表反转,关键是要用一个temp 指针保存断开的节点。另外第一个节点的next最后要断开。需要记的模板链表反转 ListNode head = Node; ListNode cur = Node.n...原创 2019-05-21 17:32:57 · 529 阅读 · 0 评论 -
[字符串]替换空格
标签:字符串,数组题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路两种写法,一种是用Stringbuffer,只需遍历一次,但返回时要复制一份字符串;另一种是用字符数组,缺点是要遍历两次。参考代码1、Stringbuffer注意Stringbuffer的用法...原创 2019-05-21 17:28:11 · 303 阅读 · 0 评论 -
[数组] 调整数组奇数偶数顺序
标签:数组题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路法一:最简单的方法就是把奇数和偶数按顺序挑出来,分别放到两个list里,最后再把偶数的list接到奇数list的末尾。法二:若空间复杂度限制为O(1),用类冒泡排序法参考代码最简单的方...原创 2019-05-21 17:24:58 · 424 阅读 · 0 评论 -
[动态规划]最大连续子数组
标签:动态规划,数组题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他...原创 2019-05-21 17:18:54 · 876 阅读 · 0 评论 -
[堆]找出最小的k个数
标签:堆,数组,集合题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解题思路两种方法:法1:先对数组排序,然后取出前k个法2:利用最大堆保存这k个数,每次只和堆顶比,如果比堆顶小,删除堆顶,新数入堆。实现第二个用堆的方法注意点判空优先队列实现堆需要额外注意:大顶堆还是小顶堆 :堆是一种非...原创 2019-05-21 17:17:15 · 477 阅读 · 0 评论 -
[栈和队列]滑动窗口的最大值
标签:队列,堆,集合题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,...原创 2019-05-21 17:11:42 · 226 阅读 · 0 评论