随笔分类 -  数据结构和算法

摘要:如果要将两个数m和n排成最小的数,我们只需要通过字符串的比较(不用数字比较可以防止大数溢出),得到mn 和 nm哪个比较大,因为二者的位数是相同的。 Arrays.sort(strs,(o1,o2)->(o1+o2).compareTo(o2+o1)); 自定义排序方式:当 o1+o2 > o2+o 阅读全文
posted @ 2020-06-11 16:11 xd会飞的猫 阅读(261) 评论(0) 推荐(0)
摘要:法1:O(n) 要改变数组,partition的思想 1 class Solution { 2 public int[] getLeastNumbers(int[] arr, int k) { 3 int[] ans = new int[k]; 4 findKMin(arr,0,arr.length 阅读全文
posted @ 2020-06-10 15:11 xd会飞的猫 阅读(160) 评论(0) 推荐(0)
摘要:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节 阅读全文
posted @ 2020-06-09 11:41 xd会飞的猫 阅读(112) 评论(0) 推荐(0)
摘要:990. 等式方程的可满足性 1 class Solution { 2 public boolean equationsPossible(String[] equations) { 3 int[] parent = new int[26];//存放节点的父节点 4 for(int i = 0; i 阅读全文
posted @ 2020-06-08 10:51 xd会飞的猫 阅读(134) 评论(0) 推荐(0)
摘要:面试题26. 树的子结构 首先从A的头节点开始匹配,如果节点值相等,就接着匹配左子树,左子树都相等就匹配右子树 如果A头节点不匹配,就从A的左子树开始匹配....如果左子树不匹配,就从A的右子树开始匹配.....(匹配过程递归执行) 1 class Solution { 2 public boole 阅读全文
posted @ 2020-06-07 15:22 xd会飞的猫 阅读(191) 评论(0) 推荐(0)
摘要:最开始用回溯法尝试,通过了2/3的用例,后来出现超时,应该是对于从beginword到endword找不到路径的情况下无法退出循环。 该题一个单词转换为另一个单词的过程,可以抽象成在一个无向图游走,能够转化的两个单词之间形成一条无向边。然后就是求最短路径的问题了。 广度优先搜索一层一层地进行遍历,每 阅读全文
posted @ 2020-06-07 11:53 xd会飞的猫 阅读(184) 评论(0) 推荐(0)
摘要:非递归解法:需要定义一个懒节点,因为l1和l2可能为空。 1 class Solution { 2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 3 ListNode merge = new ListNode(-1); 4 Lis 阅读全文
posted @ 2020-06-06 15:31 xd会飞的猫 阅读(176) 评论(0) 推荐(0)
摘要:面试题22. 链表中倒数第k个节点 1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = 阅读全文
posted @ 2020-06-06 15:02 xd会飞的猫 阅读(108) 评论(0) 推荐(0)
摘要:回溯法的解体框架 解决一个回溯问题,实际上就是一个决策树的遍历过程。一般来说,我们需要解决三个问题: 路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做选择的条件。 可以套用模板: LinkedList result = new LinkedLi 阅读全文
posted @ 2020-06-06 12:32 xd会飞的猫 阅读(192) 评论(0) 推荐(0)
摘要:需要注意的条件:当n为负数的时候,是求倒数的幂。当x为0的时候返回0。 N & 1 == 1相当于 N % 2 == 1 N >> 1 相当于 N / 2 假设K为偶数, 则当N是奇数的时候 X^(K+1) = (X^K/2) * (X^K/2) * X 则当N是偶数的时候 X^(K) = (X^K 阅读全文
posted @ 2020-06-05 12:34 xd会飞的猫 阅读(165) 评论(0) 推荐(0)
摘要:排序算法比较 https://www.cnblogs.com/bjwu/articles/10006419.html 冒泡排序 1 /**冒泡排序 2 * 第一次比较0~N-1位 将最大值沉底 3 * 第二次比较0~N-2位 将最大值沉底 4 * ...... 5 * 第N-1次比较0~1位 将最大 阅读全文
posted @ 2020-06-05 10:15 xd会飞的猫 阅读(211) 评论(0) 推荐(0)
摘要:1 class Solution { 2 public int[] spiralOrder(int[][] matrix) { 3 if(matrix == null || matrix.length == 0){ 4 return new int[]{}; 5 } 6 int index = 0; 阅读全文
posted @ 2020-05-31 16:18 xd会飞的猫 阅读(160) 评论(0) 推荐(0)
摘要:暴力解法一:枚举宽度 1 class Solution { 2 public int largestRectangleArea(int[] heights) { 3 int n = heights.length; 4 int ans = 0; 5 // 枚举左边界 6 for (int left = 阅读全文
posted @ 2020-05-30 22:19 xd会飞的猫 阅读(193) 评论(0) 推荐(0)
摘要:队列的最大值 dataQueue作为主队列,负责元素出队列和入队列,maxQueue的队头始终是主队列中的元素最大值。 当入队列的元素大于 maxQueue的队尾时,将maxQueue队尾元素依次弹出,直到遇到大于入队元素的值。如果入队元素比maxQueue队尾元素小,则直接加入maxQueue。 阅读全文
posted @ 2020-05-29 21:46 xd会飞的猫 阅读(226) 评论(0) 推荐(0)
摘要:笔试解法:暴力求解,时间复杂度为O(N*k) 1 class Solution { 2 public int[] maxSlidingWindow(int[] nums, int k) { 3 if(nums == null || nums.length == 0){ 4 return new in 阅读全文
posted @ 2020-05-29 20:31 xd会飞的猫 阅读(146) 评论(0) 推荐(0)
摘要:机器人走路问题 一个机器人可以在1~N上行走,每一步可以向前或向后走,给定起点S > 1,终点 < N,每一次行走K步,机器人从S走到E一共有多少种方法。 暴力递归 暴力递归存在大量重复的递归过程。可以用空间换取时间,记录可能出现的重复解,之后不需要递归展开直接拿到之前算过的值。即,记忆化搜索。时间 阅读全文
posted @ 2020-05-29 17:34 xd会飞的猫 阅读(208) 评论(0) 推荐(0)
摘要:位运算的小技巧 【n & 1 == 0 ? 偶数:奇数】可以用来判断是奇数还是偶数 左移运算a<<1可以作为乘2使用 右移运算a>>1可以作为除以2使用 获得第 i 位【(a>>i)&1】或者【 a&(1<<i)】 将第 i 位设为1【a=a|(1<<i)】 将第 i 位设为0【a=a&(~(1<< 阅读全文
posted @ 2020-05-28 23:36 xd会飞的猫 阅读(198) 评论(0) 推荐(0)
摘要:1 class Solution { 2 public int ptr = 0; 3 public String decodeString(String s) { 4 LinkedList<String> stk = new LinkedList<>(); 5 while(ptr < s.lengt 阅读全文
posted @ 2020-05-28 20:37 xd会飞的猫 阅读(313) 评论(0) 推荐(0)
摘要:8杯水里,一杯水中1种毒药,喝下去马上就会毒发,需要至少几只实验鼠能测出来哪杯有毒? 3只。 马上毒发:实验鼠有两种状态,可以视为0死亡,1存活。 3只鼠,一共就有2^3=8种状态,通过鼠的8种状态可以来判断哪杯水有毒。 000,001,010,011,100,101,110,111 第1杯水编号0 阅读全文
posted @ 2020-05-27 21:30 xd会飞的猫 阅读(231) 评论(0) 推荐(0)
摘要:Morris遍历 通过利用空闲指针的方式,来节省空间。时间复杂度O(N),额外空间复杂度O(1)。普通的非递归和递归方法的额外空间和树的高度有关,递归的过程涉及到系统压栈,非递归需要自己申请栈空间,都具有O(N)的额外空间复杂度。 Morris遍历的原则: 1. 假设当前节点为cur, 2. 如果c 阅读全文
posted @ 2020-05-27 12:01 xd会飞的猫 阅读(757) 评论(0) 推荐(5)