剑指offer(Java实现)
gggzy
这个作者很懒,什么都没留下…
展开
-
剑指offer(26)将二叉排序树转化成双向链表
之前一直没看懂这个题,今天才看懂/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class So...原创 2019-06-16 22:12:49 · 111 阅读 · 0 评论 -
剑指offer(61)二叉树的序列化与反序列化
一 先序遍历/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution {...原创 2019-04-21 17:41:18 · 93 阅读 · 0 评论 -
剑指offer(39)平衡二叉树
/*public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root == null){ return true; } if(Math.abs((getHeight(root.left)) - (getHeight(r...原创 2019-04-10 09:35:48 · 93 阅读 · 0 评论 -
剑指offer(46)圆圈中最后剩下的数(约瑟夫问题)
一 用双向链表模拟环来解决import java.util.*;public class Solution { public int LastRemaining_Solution(int n, int m) { if(n < 1 || m < 1){ return -1; } List<I...原创 2019-04-13 14:41:03 · 109 阅读 · 0 评论 -
剑指offer(52)正则表达式匹配
左程云《程序员面试宝典》P294public class Solution { public boolean match(char[] str, char[] pattern) { if(str == null || pattern == null){ return false; } return isVa...原创 2019-04-16 14:38:30 · 145 阅读 · 0 评论 -
剑指offer(45)扑克牌顺子
import java.util.Arrays;import java.util.Scanner;//看拿出来的一把牌是否是顺子,A:1,JQK:11,12,13 大王小王:0,可看作任何数字//先判断numbers的长度,为0直接返回false//求0的个数//求两个相邻数字之间的空位//如果有对子直接返回false//如果0的个数大于等于相邻数字之间的空位则返回truepub...原创 2019-04-13 10:13:00 · 100 阅读 · 0 评论 -
剑指offer(51)构建乘积数组
一 简单解法,时间复杂度O(n)B[0] = 1 * A[1] * A[2] * A[3] * ........A[n-1]B[1] = A[0] * 1 *A[2] * A[3] * ........A[n-1]B[2] = A[0] * A[1] *1 * A[3] * ........A[n-1].........B[n-1] = A[0] * A[1] * A[2...原创 2019-04-16 10:10:50 · 100 阅读 · 0 评论 -
剑指offer(32)把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;public class Soluti...原创 2019-04-03 14:22:29 · 87 阅读 · 0 评论 -
剑指offer(38)二叉树的深度
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*//*//递归public class Solution {...原创 2019-04-09 10:55:55 · 80 阅读 · 0 评论 -
剑指offer(31)1到n中n出现的次数
简单解法。非最优解。第二种方案参见《程序员代码面试指南》p430public class Solution { public int NumberOf1Between1AndN_Solution(int n) { if(n < 1){ return 0; } int count = 0; ...原创 2019-04-03 11:06:56 · 108 阅读 · 0 评论 -
剑指offer(37)数字在排序数组中出现的次数
/*public class Solution { public int GetNumberOfK(int [] array , int k) { if(array == null && array.length == 0){ return 0; } int count = 0; for(int...原创 2019-04-09 09:31:23 · 88 阅读 · 0 评论 -
剑指offer(44)翻转单词顺序列
public class Solution { //全体翻转之后,再把每个单词翻转 public String ReverseSentence(String str) { if(str == null || str.length() == 0 || str.length() == 1){ return str; } ...原创 2019-04-12 10:33:21 · 71 阅读 · 0 评论 -
剑指offer(43)左旋转字符串
/*使用内置函数,用三个reverse(),先分别反转前k,再反转后面的,再整体翻转public class Solution { public String LeftRotateString(String str,int n) { if(str == null || str.length() == 0 || n <= 0){ return ...原创 2019-04-12 09:38:15 · 171 阅读 · 1 评论 -
剑指offer(30)连续子数组的最大和
public class Solution { public int FindGreatestSumOfSubArray(int[] array) { if(array == null || array.length == 0){ return 0; } int result = array[0];//最大和 ...原创 2019-04-02 16:13:13 · 94 阅读 · 0 评论 -
剑指offer(29)最小的k个数
public class Solution { public int[] GetLeastNumbers_Solution(int [] arr, int k) { if(k < 1 || k > arr.length){ return arr; } int[] kHeap = new int[k]; ...原创 2019-04-02 16:12:02 · 96 阅读 · 0 评论 -
剑指offer(62)二叉树第k个节点
一 非递归方式/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/import java.util.Stack;...原创 2019-04-21 17:45:13 · 368 阅读 · 0 评论 -
剑指offer(53)表示数值的字符串
最复杂的情况:-5.23E-23(只是一个例子)以此为例子可以分为:碰到“+-”号,碰到数字0-9,碰到“.”,碰到“E”或“e”来分析即A.BEC(这里的E还可以为e),A,C都可以是负数,B是无符号数。所以逐个封装(运行通不过,佛了)public class Solution { private int index = 0; public boolean is...原创 2019-04-17 13:38:48 · 129 阅读 · 1 评论 -
剑指offer(54)字符流中第一个不重复的文字
如果是一个长度固定的字符串,可以定义哈希表的key是字符,value是字符出现的次数。每个字母根据其ASCⅡ(一共128种可能)值作为数组的下标对应数组的下标 对应数组的一个数字,数组中存储的是出现的次数。public class Solution { //Insert one char from stringstream StringBuffer s = new String...原创 2019-04-17 13:40:48 · 91 阅读 · 0 评论 -
剑指offer(60)按层打印二叉树
一 剑指offer上规定了返回值为ArrayList<ArrayList<Integer>>类型,做法与层序遍历二叉树一样,但是需要按行打印出来,所以还是需要两个变量每一个last表示本层最后一个节点,nLast表示下一层最后一个节点,每次当前节点遍历到last就说明该换行了,然后将本行的节点值保存在ArrayList中,最后将每层的ArrayList保存到大的ArrayL...原创 2019-04-20 14:05:21 · 252 阅读 · 0 评论 -
剑指offer(59)按之字形顺序打印二叉树
使用一个双端队列,具体为Java中的LinkedList结构,这个结构的底层实现就是非常纯粹的双端队列结构。首先生成双端队列dq,将根节点从dq的头部放入dq原则1:如果是从左到右的过程,那么一律从dq的头部弹出节点,如果弹出的节点没有孩子节点,当然不用放入任何节点到dq中,如果当前节点有孩子节点,先让左孩子从尾部进入dq,再让右孩子从尾部进入dq原则2:如果是从右到左的过程,那么一律...原创 2019-04-20 10:20:00 · 104 阅读 · 0 评论 -
剑指offer(58)判断二叉树是否对称
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { boolea...原创 2019-04-19 10:46:07 · 95 阅读 · 0 评论 -
剑指offer(57)二叉树的下一个节点
/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}*/p...原创 2019-04-19 10:05:35 · 94 阅读 · 0 评论 -
剑指offer(66)机器人的运动范围
public class Solution { public int movingCount(int threshold, int rows, int cols) {//rows是行数,row是行的坐标 列同理 if(threshold < 0 || rows <= 0 || cols <= 0) return 0; ...原创 2019-04-23 13:59:49 · 236 阅读 · 0 评论 -
剑指offer(65)矩阵中的路径
public class Solution { //回溯法:使用回溯法,回溯法可以看作看成蛮力法的升级版,从解决问题的每一步的所有可能选项里系统地选出一个可行的解决方案,回溯法非常 //适合由多个步骤组成的问题,并且每个步骤有多个选择,当我们在某一步选择了其中一个选项时,就进入下一步,然后又面临新的选项,我们就这 //重复选择,直至到达最终的状态 //当矩...原创 2019-04-23 10:23:42 · 91 阅读 · 0 评论 -
剑指offer(56)删除链表中重复的节点
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode deleteDuplication(ListNode pH...原创 2019-04-18 11:15:51 · 94 阅读 · 0 评论 -
剑指offer(55)链表中环的入口节点
一 简单解法:看ArrayList中是否已经有当前节点,没有则加入,第一个遍历到的已经存在的节点即为入口节点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util...原创 2019-04-18 09:30:05 · 86 阅读 · 0 评论 -
剑指offer(50)数组中重复的数字
一 分别比较public class Solution { // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: (Output) the duplicated number...原创 2019-04-15 15:00:17 · 85 阅读 · 0 评论 -
剑指offer(49)把字符串转化为整数
public class Solution { public int StrToInt(String str) { if(str == null || str.equals("") || str.length() == 0){ return 0; } char[] ch = str.toCharArray(); ...原创 2019-04-15 10:34:47 · 95 阅读 · 0 评论 -
剑指offer(64)滑动窗口的最大值
import java.util.ArrayList;import java.util.LinkedList;public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> list = n...原创 2019-04-22 16:14:57 · 123 阅读 · 0 评论 -
剑指offer(63)求数据流的中位数
import java.util.PriorityQueue;import java.util.Comparator;public class Solution {//小顶堆是PriorityQueue的默认结构,所以大顶堆需要重写compare方法,做一个比较器 private PriorityQueue<Integer> minHeap = new PriorityQ...原创 2019-04-22 13:52:28 · 214 阅读 · 0 评论 -
剑指offer(48)不用加减乘除做加法
public class Solution { public int Add(int num1,int num2) { if(num1 == 0 && num2 == 0){ return 0; } int temp = num1 ^ num2;//不进位 int tempS = (nu...原创 2019-04-14 17:22:58 · 88 阅读 · 0 评论 -
剑指offer(47)求1+2+3+……+n
public class Solution { /* public int Sum_Solution(int n) { if(n < 1){ return 0; } return n + Sum_Solution(n - 1); } */ public int Sum_Soluti...原创 2019-04-14 17:22:02 · 80 阅读 · 0 评论 -
剑指offer(36)两个链表的第一个公共节点
//判断两个无环链表是否相交,如果相交返回第一个相交节点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode F...原创 2019-04-08 09:25:25 · 92 阅读 · 0 评论 -
剑指offer(35)数组中的逆序对
//思路与归并排序相似public class Solution { public int InversePairs(int [] array) { if(array == null || array.length == 0){ return 0; } int[] copy = new int[array.leng...原创 2019-04-08 09:24:15 · 102 阅读 · 0 评论 -
剑指offer(24)二叉树中和为某一值的路径
import java.util.ArrayList;import java.util.Comparator;import java.util.Collections;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tre...原创 2019-03-28 19:52:52 · 86 阅读 · 0 评论 -
剑指offer(17)树的子结构
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { publi...原创 2019-03-22 10:26:38 · 89 阅读 · 0 评论 -
剑指offer(16)单调不减合并两个排序的链表
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Merge(ListNode list1,ListNode l...原创 2019-03-21 15:41:20 · 132 阅读 · 0 评论 -
剑指offer(15)反转链表
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode ReverseList(ListNode head) { ...原创 2019-03-21 15:40:20 · 84 阅读 · 0 评论 -
剑指offer(8)跳台阶
public class Solution { public int JumpFloor(int target) { int first = 1; int second = 2; int result = 0; if(target <= 0){ return 0; }else if...原创 2019-03-17 14:59:43 · 105 阅读 · 0 评论 -
剑指offer(7)斐波那契数列
public class Solution { public int Fibonacci(int n) { int a = 1,b = 1,c = 0; if(n <= 0){ return 0; }else if(n == 1 || n == 2){ return 1; ...原创 2019-03-17 14:56:01 · 108 阅读 · 0 评论