随笔分类 -  剑指offer

摘要:1 public class Main { 2 3 public Node removeDup(Node node){ 4 5 if (node == null || node.next == null || node.next.next == null){ 6 return node; 7 } 8 9 ... 阅读全文
posted @ 2018-12-02 10:45 Mr.van_Gogh 阅读(372) 评论(0) 推荐(0)
摘要:1 import java.util.HashSet; 2 import java.util.Set; 3 4 public class Main { 5 6 // 从无序链表中删除重复项 7 public Node removeDup(Node node) { 8 9 if (node == null || node.next == nu... 阅读全文
posted @ 2018-12-01 23:50 Mr.van_Gogh 阅读(736) 评论(0) 推荐(0)
摘要:1 public class Main { 2 3 // 逆序打印链表 4 public void reversePrint(Node node) { 5 if (node == null){ 6 return; 7 } 8 reversePrint(node.next); 9 ... 阅读全文
posted @ 2018-12-01 22:54 Mr.van_Gogh 阅读(512) 评论(0) 推荐(0)
摘要:1 public class Main { 2 3 // 就地逆序法 4 public Node reverse(Node head) { 5 // no need to reverse 6 if (head == null || head.next == null || head.next.next == null) { 7 ... 阅读全文
posted @ 2018-12-01 22:22 Mr.van_Gogh 阅读(3283) 评论(0) 推荐(0)
摘要:1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 /** 5 * 功能:判断两个字符串是否由相同的字符组成,比如aaaabbc和abcbaaa就是。 6 * 思路1:将两个字符串按字符进行排序,判断排序后字符串是否相同; 7 * 思路2:申请一个256大小的int数组,遍历第一个字符串,遇到一个字符,就将字... 阅读全文
posted @ 2018-07-08 21:16 Mr.van_Gogh 阅读(3247) 评论(0) 推荐(0)
摘要:1 import java.util.Scanner; 2 3 /** 4 * 功能:字符串翻转,例如how are you 翻转为you are how 5 */ 6 public class Main5 { 7 8 public String swap(String string) { 9 10 if (string == null) { ... 阅读全文
posted @ 2018-07-08 20:29 Mr.van_Gogh 阅读(404) 评论(0) 推荐(0)
摘要:1 import java.util.Scanner; 2 3 /** 4 * 功能:位运算,求二进制数中1的个数 5 * 思路:通过每次右移一位,并与1进行与运算,判断该位是否是1,最后统计个数。 6 */ 7 public class Main4 { 8 9 public int count(int num) { 10 11 if (nu... 阅读全文
posted @ 2018-07-08 17:24 Mr.van_Gogh 阅读(553) 评论(0) 推荐(0)
摘要:1 import java.util.Scanner; 2 3 /** 4 * 功能:用位运算,判断一个数是否为2的n次方。 5 * 思路:用1做移位操作,然后判断移位后的值是否与给定的数相同。 6 */ 7 public class Main3 { 8 9 public boolean isPower(int n) { 10 11 if (... 阅读全文
posted @ 2018-07-07 23:16 Mr.van_Gogh 阅读(1816) 评论(0) 推荐(0)
摘要:1 import java.util.Scanner; 2 3 /** 4 * 功能:用位运算,实现乘法运算,但仅限于乘数是偶数。 5 */ 6 public class Main2 { 7 8 public int powerN(int m, int n) { 9 while (n > 0) { 10 m = m << ... 阅读全文
posted @ 2018-07-07 22:39 Mr.van_Gogh 阅读(1375) 评论(0) 推荐(0)
摘要:1 import java.util.Stack; 2 3 /** 4 * 功能:O(1)时间复杂度求栈中最小元素 5 * 思路:空间换取时间,使用两个栈,stack1栈存储数据,stack2栈存储最小值; 6 * stack1入栈时,发现比stack2栈顶元素还小,则同时入stack2;stack1出栈时,同时也将stack2中的元素出栈。 7 */ 8 public... 阅读全文
posted @ 2018-06-27 22:34 Mr.van_Gogh 阅读(785) 评论(0) 推荐(0)
摘要:【题目】旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返 阅读全文
posted @ 2018-01-14 16:19 Mr.van_Gogh 阅读(267) 评论(0) 推荐(0)
摘要:【题目】两个队列实现一个栈 1. 首先,第一个元素1,选择一个队列插入,比如,选择queue1; 2. 然后,模拟入栈,后续元素插入已经含有元素的队列中,比如,queue1中再依次插入2,3; 3. 接着,模拟出栈,后入先出,此时应该3出栈,方法是让queue1先出1,2,同时,queue2依次入1 阅读全文
posted @ 2017-12-03 22:35 Mr.van_Gogh 阅读(265) 评论(0) 推荐(0)
摘要:【题目】两个栈实现一个队列 阅读全文
posted @ 2017-12-03 21:48 Mr.van_Gogh 阅读(234) 评论(0) 推荐(0)
摘要:【题目】根据二叉树的前序和中序遍历,重建二叉树,返回根节点。 1. 根据前序遍历,找到根节点。 2. 在中序遍历中找到根节点的位置,进而得到中序遍历中左右两个子树的划分位置。 3. 在前序遍历中找到左右两个子树的位置。 4. 根据这些位置,对左右子树分别进行递归操作,得到根节点的左右孩子节点。 阅读全文
posted @ 2017-12-03 12:39 Mr.van_Gogh 阅读(171) 评论(0) 推荐(0)
摘要:【题目】输入一个链表的头节点,从尾到头反过来打印每个节点的值。 1. 遍历的顺序是从头到尾,打印的顺序则是从尾到头,首先,想到栈,然后,递归的本质是一个栈结构,因此,想到用递归。 阅读全文
posted @ 2017-12-02 22:26 Mr.van_Gogh 阅读(228) 评论(0) 推荐(0)
摘要:【题目】有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请实现一个函数,把A2中所有数字插入到A1中,并且所有的数字是排序的。 1. 从后往前比较A1和A2中的数字,并把较大的数字复制到A1的合适位置。 阅读全文
posted @ 2017-12-02 19:56 Mr.van_Gogh 阅读(181) 评论(0) 推荐(0)
摘要:【题目】请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 1. 时间复杂度为O(n)的算法。 首先,遍历原字符数组,得到空格的个数,乘以2就是新字符数组比原字符数组增加的字符空间。 然后,初始化 阅读全文
posted @ 2017-12-02 19:06 Mr.van_Gogh 阅读(193) 评论(0) 推荐(0)
摘要:【题目】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1.普通方法(不利用有序的特征) 2.利用有序的特征,效率更高 阅读全文
posted @ 2017-12-02 15:00 Mr.van_Gogh 阅读(319) 评论(0) 推荐(0)
摘要:1 import java.util.ArrayList; 2 import java.util.LinkedList; 3 import java.util.Queue; 4 /** 5 public class TreeNode { 6 int val = 0; 7 TreeNode left = null; 8 TreeNode right = nu... 阅读全文
posted @ 2016-09-21 15:46 Mr.van_Gogh 阅读(171) 评论(0) 推荐(0)
摘要:1 import org.junit.Test; 2 3 public class AllSort { 4 5 public void permutation(char[] buf, int start, int end) { 6 if (start == end) {// 当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 7 ... 阅读全文
posted @ 2016-09-21 15:33 Mr.van_Gogh 阅读(233) 评论(0) 推荐(0)