数据结构
文章平均质量分 73
一米三的老阿姨
这个作者很懒,什么都没留下…
展开
-
求二进制数中1的个数
给定一个整数,最快的速度计算1的个数public class A_Bite {public static void main(String[] args) {// int[] n={0,1,0,0,0,1,1,1};// count(n);// count2(10);// count3(100);// count4(100);count5(100);}原创 2016-07-25 11:37:03 · 184 阅读 · 0 评论 -
数据结构 打印两个有序链表的公共部分
程序员代码面试指南(左程云)读书笔记 2-1第二章打印两个有序链表的公共部分题目: 给定两个有序的链表的头指针head1和head2,打印两个链表的公共部分解:因为是有序链表,所有两个链表的头开始如下判断 1.如果head1的值小于head2,则head1向下移动 2.如果head1的值大于head2,则head2向下移动原创 2016-07-21 22:05:32 · 994 阅读 · 0 评论 -
复杂链表的复制(复制含有随机指针节点的链表)
程序员代码面试指南(左程云)读书笔记 第三章复杂链表的复制(复制含有随机指针节点的链表)题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)public class ListRandom { class原创 2016-08-29 14:49:57 · 982 阅读 · 0 评论 -
数据结构 反转单向链表和双向链表
程序员代码面试指南(左程云)读书笔记 第三章反转单向链表和双向链表//单向链表public class Node { public int value; public Node next; public Node(int data){ this.value=data; }}public class ReturnList {public static void main(String[] a原创 2016-08-08 11:21:45 · 3261 阅读 · 0 评论 -
数据结构 环形单链表的约瑟夫问题
环形单链表的约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友原创 2016-08-08 15:12:44 · 1191 阅读 · 0 评论 -
在二叉树中找到两个节点的最近公共祖先
程序员代码面试指南(左程云)读书笔记 第三章在二叉树中找到两个节点的最近公共祖先题目: 给定一棵二叉树的头节点head,以及这棵二叉树的两个节点o1和o2,请返回o1和o2的最近公共祖先节点。解答: 后序遍历二叉树,假设遍历到的当前结点为cur,因为是后序遍历,所以先处理cur的两颗子树,假设处理cur左子树时返回left,处理右子树时返回right.原创 2016-08-30 17:21:54 · 8208 阅读 · 0 评论 -
KMP算法详解
程序员代码面试指南(左程云)读书笔记 第九章KMP算法详解(今天听力左程云老师在牛客网上的课,讲的其中一个就是kmp,所以决定把这个过程记下来,巩固学习。)题目:给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有子串match,则返回match在str中的开始位置,不含则返回-1;举例:str="acbc", match="bc"原创 2016-09-01 11:35:47 · 637 阅读 · 0 评论 -
数据结构 将搜索二叉树转换成双向链表
程序员代码面试指南(左程云)读书笔记 第三章将搜索二叉树转换成双向链表 对于二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针:对双向链表来说,有本身的值域,有指向上一节点和下一阶节点的指针。在结构上还是有相似的地方的,现在有一棵搜索二叉树,请将其转换为一个有序的双向链表。方法一: 用队列等容器收集二叉树中中序遍历的结果的方法,时间复杂度为O(N),原创 2016-08-21 22:00:53 · 815 阅读 · 0 评论 -
单链表的选择排序
程序员代码面试指南(左程云)读书笔记 第三章单链表的选择排序题目: 给定一个无序单链表的头节点head,实现单链表的选择排序。 要求:额外空间复杂度为O(1) 既然要求额外空间复杂度为O(1),就不能把链表装进数组等容器中排序,排好序之后再重新连接,而是要求在原链表上利用几个有限的变量完成排序过程,解法如下: 1.开始时默认整个链表都是未排序部原创 2016-08-22 21:58:53 · 809 阅读 · 0 评论 -
二叉树的序列化和反序列化
程序员代码面试指南(左程云)读书笔记 第三章二叉树的序列化和反序列化题目: 二叉树被记录成文件的过程叫做二叉树的序列化,通过文件内容重建原来的二叉树的过程叫做二叉树的反序列化。给定一棵二叉树的头节点head,并已知二叉树节点值得类型为32为整形。请设计一种二叉树序列化和反序列化的方案,并用代码实现。方法一 通过先序遍历实现序列化和发序列化 首先假设序列化的结果字符串为st原创 2016-08-24 20:53:37 · 323 阅读 · 0 评论 -
最长递增子序列,(搜狐[编程题]马戏团)
程序员代码面试指南(左程云)读书笔记 第四章最长递增子序列,(搜狐[编程题]马戏团)题目:给定数组arr ,返回arr的最长递增子序列。例如:arr=[2,1,5,3,6,4,8,9,7] 返回【1,3,4,8,9】先介绍O(N*N)的方法,1,生成长度为N数组dp,dp[i]表示在以arr[i]这个数结尾的情况下,arr[0..i]中的最大递增子序列长度。2,对第一个原创 2016-09-05 16:55:33 · 787 阅读 · 0 评论 -
数据结构 找到二叉树中的最大搜索二叉子树
程序员代码面试指南(左程云)读书笔记 第三章 找到二叉树中的最大搜索二叉子树题目:给定一棵二叉树的头节点head, 已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这颗子树的头节点。 例如:如图二叉树 这颗二叉树的最大搜索二叉子树如图所示要求: 如果节点数为N,原创 2016-08-23 19:42:26 · 2237 阅读 · 0 评论 -
数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个?解: 这个问题可以有二叉树解决,或者的人是二叉树的头,当一个结点有父节点时,父节点一定会被子节点吃掉,也就是只要有子节点的结点,就是被僵尸吃掉的人。如图: 1 / \ 1原创 2016-07-22 00:52:25 · 1082 阅读 · 0 评论 -
数据结构 最大值减去最小值小于或等于num的子数组数量
程序员代码面试指南(左程云)读书笔记(9)第一章最大值减去最小值小于或等于num的子数组数量题目: 如果数组长度问N,请实现时间复杂度为O(N)的解法package cn.chen.mystack;import java.util.LinkedList;public class Stack_10 { public static void原创 2016-07-21 21:30:43 · 802 阅读 · 0 评论 -
数据结构 分别用递归和非递归方法实现二叉树先序,中序,后序遍历
程序员代码面试指南(左程云)读书笔记 第二章分别用递归和非递归方法实现二叉树先序,中序,后序遍历 题目: 用递归和非递归方式,分别按照二叉树先序,中序,后序打印所有的节点。package com.chen.Recur;import java.util.Stack;public class Recur { public static void m原创 2016-08-04 14:37:29 · 684 阅读 · 0 评论 -
基本算法之排序
/* * 不变性: * 在很多算法中,有些条件在算法执行时是不变的,这些条件被称为不变性, * *///冒泡排序public class MaoPao {public static void main(String[] args) {int [] a={3,5,2,6,4,34,8,7,5,4,23};int[] s=maopaoSotr(a);for原创 2016-08-16 11:01:39 · 206 阅读 · 0 评论 -
数据结构 在单链表和双链表中删除倒数第K个节点
程序员代码面试指南(左程云)读书笔记 2-1第二章在单链表和双链表中删除倒数第K个节点题目:分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)单链表删除倒数第k个数public class Node { public原创 2016-07-25 15:26:14 · 324 阅读 · 0 评论 -
两个链表相交的一系列问题
程序员代码面试指南(左程云)读书笔记 第二章两个链表相交的一系列问题 在本题中单链表可能有环,也可能没有环。给定连个单链表的头节点,head1和head2,这连个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点,如果不相交,返回null;要求: 如果链表1的长度为N,链表2的长的为W,时间复杂度问O(N+W),额外空间复原创 2016-07-26 17:47:05 · 429 阅读 · 0 评论 -
数据结构9
程序员代码面试指南(左程云)读书笔记(9)第一章求最大子矩阵的大小题目: 给定一个整型矩阵map,其中的值只有0和1两种,求其中全是1的所有矩形区域中最大的矩形区域为1的数量。例如: 1 1 1 0其中,最大的矩形区域有3个1,所以返回3.再如:1 0 1 1 1 1 1 1 1 1 1 0其中,原创 2016-07-17 23:44:28 · 283 阅读 · 0 评论 -
数据结构 编写一个类,用两个栈实现队列,支持队列的基本操作(add 、poll、peek)
程序员代码面试指南(左程云)读书笔记第一章2.编写一个类,用两个栈实现队列,支持队列的基本操作(add 、poll、peek)import java.util.Stack;public class MyStack_02_1 {public Stack stackPush;public Stack stackPop;public MyStack_02_原创 2016-07-02 16:17:01 · 1260 阅读 · 0 评论 -
数据结构 设计一个有getMin功能的栈
程序员代码面试指南(左程云)读书笔记 第一章1.设计一个有getMin功能的栈 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作 要求:1 pop, push,getMin操作时间复杂度都是O(1) 2 设计的栈类型可以使用现成的栈结构 解答:设计上用两栈,一个栈用来保存当前栈中的元素,它的功原创 2016-07-02 16:19:14 · 310 阅读 · 0 评论 -
数据结构 如何仅用递归函数和栈操作逆序一个栈
程序员代码面试指南(左程云)读书笔记(3)第一章如何仅用递归函数和栈操作逆序一个栈 题目: 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别是5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。import java.util.Stack;pub原创 2016-07-03 23:12:06 · 259 阅读 · 0 评论 -
数据结构 猫狗队列
程序员代码面试指南(左程云)读书笔记(4)第一章猫狗队列题目: 宠物,狗和猫的类如下: public class Pet{ private String type; public Pet(String type){ this.type=type; } pu原创 2016-07-05 09:30:46 · 544 阅读 · 0 评论 -
数据结构5 用一个栈实现另一个栈的排序
程序员代码面试指南(左程云)读书笔记(5)第一章用一个栈实现另一个栈的排序题目: 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但是不能申请额外的数据结构,如何完成排序?解答: 将要排序的栈记为stack,申请的辅助栈记为help.在stack上执行pop操作,弹出的元素记为cru.原创 2016-07-06 10:50:26 · 1036 阅读 · 0 评论 -
数据结构 生成窗口最大值数组
程序员代码面试指南(左程云)读书笔记(7)第一章生成窗口最大值数组题目: 有一个整形数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 例如:数组为【4、3、5、4、3、3、6、7】,窗口大小为3时:【4、3、5】4、3、3、6、7 窗口最大值为54【3、5、4】3、3、6、7原创 2016-07-15 23:03:44 · 333 阅读 · 0 评论 -
数据结构(8) 构造数组的MaxTree
程序员代码面试指南(左程云)读书笔记(8)第一章构造数组的MaxTree题目: 定义二叉树结点如下: public class Node(){ public int value; public Node left; public Node right; public Node(int data){原创 2016-07-17 16:01:00 · 375 阅读 · 0 评论 -
数据结构 僵尸问题
数据结构 僵尸问题有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解: 这个问题可以有二叉树解决,或者的人是二叉树的头,当一个结点有父节点时,父节点一定会被子节点吃掉,也就是只要有子节点的结点,就是被僵尸吃掉的人。如图: 代码如下代码块代码块语法遵循标准markdown代码,例如:package Str原创 2017-11-30 15:40:36 · 432 阅读 · 0 评论