《程序员代码面试指南》
cyyyyyh
这个作者很懒,什么都没留下…
展开
-
在行列都排好序的矩阵中找数
暴力的话时间复杂度到了O(N*M)从数据状况出发考虑还有一种解法例:1 3 4 52 4 6 75 8 9 118 12 13 16假如说是找6我们从左下角开始走一开始是8 比6大 那么就不用考虑8的右面了 直接往上走走到了5 5比6小 那么5上面的都会比6小 向右走走到了8 8比6大 那么8的右面和下面都比6大 向上走走到了4 4比6大 那么4的上面都...原创 2019-04-15 20:17:47 · 141 阅读 · 0 评论 -
关于排序
冒泡排序 public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = arr.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (ar...原创 2019-04-19 19:16:06 · 137 阅读 · 0 评论 -
已知一颗完全二叉树,求其节点的个数
时间复杂度要求低于0(N),N为这棵树的节点个数思路:一颗完全二叉树L他的节点个数是2L-1;对于一颗满二叉树,顺着他的左子树往下走,我们很快就能知道他的深度以及整棵树节点的大致个数那个区间,然后在顺着头结点右孩子的左子树不停地走,当在深度那一层有节点的时候,那么整个左子树都是满的,因为我们知道深度那么这个时候左子树的个数就是确定的(2(L-1) - 1),递归去求右子数,总结一下:整个...原创 2019-05-04 16:31:09 · 1062 阅读 · 0 评论 -
链表中的回文结构
判断一个链表是否为回文结构题目:给发ing一个链表分头结点,请判断该链表是否为回文结构1->2->1 true1->2->2->1 true15->6->15 true1->2->3 false思路1:每次遍历就进栈,这个时候弹栈的时候就逆序了,然后再次遍历一一比对 -- o(N)的空间复杂度 public static b...原创 2019-04-24 16:36:43 · 101 阅读 · 0 评论 -
将单链表按值划分成左小中间等右边大的形式
题目:给定一个单项链表的头结点dead,节点的值类型都是整型,在给定一个数pivot。实现一个调整链表的函数,将链表调整成左部分值都是小于pivot,中间部分都是等于值pivot,右边部分都是大于值pivot的部分。等同于荷兰国旗问题 public static Node partition1(Node head, int num) { if (head == null) { re...原创 2019-04-24 17:47:45 · 326 阅读 · 0 评论 -
是否是平衡二叉树、搜索二叉树、完全二叉树
平衡二叉树平衡二叉树:任何一个节点,左子树和右子树的高度差不能超过1。递归遍历会来到某一个节点3次,这样想办法搜集左子树和右子数上的信息,然后信息整合做判断看看整棵树符不符合标准。考察以每颗节点的树都是平衡的那么整棵树才是平衡二叉树,任何破坏标准的那么整个树就是不标准的。这样的话,走到A这个节点怎么判断以A为头节点的树是平衡的?1.左树是否平衡2.右树是否平衡3.左树和右树的高度4...原创 2019-05-04 15:40:53 · 667 阅读 · 0 评论 -
复制含有随机指针节点的链表
题目一种特殊的链表节点类描述如下:public class Node{public int value;public Node next;public Node rand;public Node(int data){this.value = data;}}Node类中的value是节点值,next指针和正常单链表中next指针的意义一样都是指向下一个节点,rand指针是Node...原创 2019-04-25 18:35:53 · 119 阅读 · 0 评论 -
二叉树中找到一个节点的后继节点
这个结构比普通的二叉树节点结构多了一个指向父节点的perent指针。假设有一颗Node类型的节点组成二叉树,树中的每个节点的parent指针都正确的指向自己的父节点,头结点的parent指向null。只给一个在二叉树中的某个节点node,请返回实现node的后继节点的函数。在二叉树的中序遍历的序列中,node的下一个节点叫做node的后继节点。在二叉树的中序遍历的序列中,node的前一个节点叫做...原创 2019-04-28 14:33:37 · 267 阅读 · 0 评论 -
理解递归
自己调用自己。。系统内部是怎么实现的看下引例//返回数组的最大值 -- 递归方式public static int getMax(int[] arr, int L, int R) { if (L == R) { //明确终止条件 return arr[L]; } int mid = (L + R) / 2; int maxLeft = getMax(arr...原创 2019-04-18 19:00:11 · 122 阅读 · 0 评论 -
二叉树的递归与非递归遍历
递归遍历 到达每个节点的顺序124442555213666377731这个时候 打印操作放在第一次到达这个节点的时候那么就是前序遍历 1245367打印操作放在第二次到达这个节点的时候那么就是中序遍历 4251637打印操作放在第三次到达这个节点的时候那么就是后序遍历 4526731 public static void preOrderRecur(Node head) { ...原创 2019-04-27 14:02:22 · 136 阅读 · 0 评论 -
用两个栈来实现队列 两个队列实现栈
import java.util.Stack;class newQueue{ Stack<Integer> s1 = new Stack<Integer>(); Stack<Integer> s2 = new Stack<Integer>(); public void add(int value) { s1.push(value);...原创 2019-04-15 20:41:46 · 153 阅读 · 0 评论 -
固定长度数组实现栈和队列
public class ArrayStack { private Integer[] arr; private Integer index; public ArrayStack(int initSize) { //固定数组大小 if (initSize < 0) { throw new IllegalArgumentException("this init si...原创 2019-04-20 21:12:40 · 307 阅读 · 0 评论 -
具有返回最小值功能的栈
import java.util.Stack;class newStack{ private Stack<Integer> s; private Stack<Integer> sMin; public newStack() { this.s = new Stack<Integer>(); this.sMin = new Stack<In...原创 2019-04-16 18:18:46 · 120 阅读 · 0 评论 -
仅用递归函数和栈操作逆序一个数
之前用两个栈可以实现队列使用两个栈就直接一个pop()另一个进行push()就可以了归根到底就是把栈底元素放到栈顶才可以这里可以理解为就是使用递归函数来代替另一个栈首先写一个递归输出栈底元素的递归函数弹出栈顶元素还要将剩下的元素原封不动放回去public static int getAndRemoveLastElement(Stack<Integer> stack) {...原创 2019-04-16 19:01:33 · 106 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
一个栈中元素的类型为整型,现在将该栈从栈顶到栈底按从小到大的顺序排列,只需申请一个栈,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?public static void sortStackByStack(Stack<Integer> stack) { Stack<Integer> help = new Stack<Integer>(); w...原创 2019-04-16 20:23:10 · 138 阅读 · 0 评论 -
两个单链表是否相交的一系列问题
题目单链表可能有环,也可能无环。给定两个单链表的头结点head1和head2,折两个链表可能相交,也可能不想交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不想交那么返回null。时间复杂度o(M+N)空间复杂度o(1)1.单链表是否有环2.两个无环单链表第一个相交的节点3.两个有环单链表第一个相交的节点分割线 – ==================1.单链表是...原创 2019-04-26 13:09:14 · 289 阅读 · 0 评论 -
汉诺塔问题
目标:将A上面的方块移动到C上面 并且不能将大的方块落到小的方块上面注意:灵魂画手已出现共经历了七部大中小 ---- 123一个盘子:大到3两个盘子:小到2 大到3 小到3三个盘子:小到3 中到2 小到2 大到3 小到1 中到3 小到3以此类推:总移动步数:2**n - 1大于三个盘子:可以理解成一个整体 然后按照两个盘子去思考 public static void han...原创 2019-04-17 19:43:34 · 135 阅读 · 0 评论 -
打印两个有序链表的公共部分
类似于归并排序最后的merge过程A>B那么B继续向前走 A<B那么A继续向前走 A=B那么打印并且都向前走public class Node{ public int value; public Node next; public Node(int data) { this.value = data; }}public void printCommonPart(...原创 2019-04-22 20:01:29 · 76 阅读 · 0 评论 -
反转单向链表和双向链表
单项链表找到当前头结点前一个节点把下一个节点设置成头结点把原来头结点设置成当前头结点的下一个节点class Node1{ int value; Node1 next; public Node1(int data) { this.value = data; }} public Node1 reverse(Node1 head) { Node1 pre = null; ...原创 2019-04-22 20:21:52 · 94 阅读 · 0 评论