自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路从字符串数组中每次选取一个元素,作为结果中的第一个元素。然后,对剩余的元素全排列,步骤跟上面一样。很明显这是个递归处理的过程,一直到最后即可。 public static ArrayList<String> P

2016-11-29 20:25:00 314

原创 二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。实现思路在二叉搜索树中,每个结点都有两个分别指向其左、右子树的指针,左子树结点的值总是小于父结点的值,右子树结点的值总是大于父结点的值。而在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个结点。所以这两种数据结构的结点是一致,二叉搜索树之所以为二叉搜索树,双向链表

2016-11-29 19:58:40 368

原创 复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。、如图 是一个含有 5 个结点的复杂链表。图中实线箭头表示 next 指针,虚线箭头表示 sibling 指针。为简单起见,指向 null 的指针没有画出。 在不用辅助空间的情况下实现 O(n)的时间效率。思路:根据原始链表的每个结点N 创建

2016-11-23 20:05:03 454

原创 二叉树中和为某一值的路径

题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。如图,输入上图的二叉树和整数 22,则打印出两条路径,第一条路径:10, 12; 第二条路径为:10, 5, 7.由于路径是从根节点出发到叶节点,也就是说路径总是以根节点为起始点,因此首先需要遍历根节点。在树的前序,中序,后序三种遍历方式中,只有前序遍历

2016-11-22 00:31:37 416

原创 二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。例子例如输入数组{5,7,6,9,11,10,8},则返回true,因为这个整数序列是下图二叉搜索树的后序遍历结果。如果输入的数组是{7,4,6,5},由于没有哪棵二叉搜索树的后序遍历的结果是这个序列,因此返回false。 分析在后序遍历得到的序列中,最后一个数字是树的根结点的值。数值中前面的

2016-11-22 00:20:23 368

原创 从上往下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图中的二叉树,则依次打印出8、6、10、5、7、9、11 思路:因为按层打印的顺序决定应该先打印根结点,所以我们从树的根结点开始分析。为; 接下来能够打印8的结点中两个子节点,我们应该在遍历到该结点时把值6和10保存在一个容器里,现在容器内就有两个结点。按照从左到右打印的要求,我们先取出值为6的结点。打印出值为6之后

2016-11-21 20:10:04 488

原创 栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)如图43512的情况是不可能的 解决思路就是建立一个辅助栈。把输入的第一个序列的数字依次压入辅助

2016-11-21 19:38:29 389

原创 包含min函数的栈

题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。思路思路1:每次压入一个新元素进栈,将栈里的元素进行排序,让最小的元素位于栈顶,这样就能在O(1)时间得到最小元素,但是这种思路不能保证最后压入栈的元素能够最先出栈。思路2:在栈里添加一个成员变量存放最小的元素。每次压入一个新元素进栈,如果该元素比当前小,则更新最小元

2016-11-20 18:41:29 402

原创 顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如输入以下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 1、2、3、4、8、12、16、15、14、13、

2016-11-20 17:49:51 391

原创 二叉树镜像

下面两棵树互为镜像 思路:先序遍历树的每个结点,若遍历到的结点有子节点,则交换它的两个结点。 void mirrorRecurisively(BinaryTreeNode node){ if (node==null)return; if (node.getLeft()==null&&node.getRight()==null)return; //当

2016-11-18 00:07:50 561

原创 树的子结构

题目:输入两棵二叉树A和B,判断B是不是A的子结构。例如下图中的两棵二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构。如果 后者是前者的一个子结构 步骤在树A中找到和B的根结点的值一样的结点R;判断树A中以R为根结点的子树是不是包含和树B一样的结构。很明显,这是一个递归的过程。 boolean HasSubtree(BinaryTreeNode pRoot1,Binary

2016-11-17 21:32:23 638

原创 合并两个排序链表

先分析一下合并过程。假设链表1的头结点的值小于链表2的头结点的值,则链表1的头结点作为合并后的链表的头结点。然后继续合并两个链表中剩余的结点。两个链表中剩下的结点依然是排序的,所以合并这两个链表的步骤和前面的步骤一样。这是典型的递归过程,可以定义递归函数来完成这一合并过程。 private ListNode merge(ListNode pHead1,ListNode pHead2){

2016-11-17 21:04:47 335

原创 反转链表

public ListNode reverList(ListNode pHead){ ListNode pReversedHead=null; ListNode pNode=pHead; ListNode pPrev=null;//前一个节点 while (pNode!=null){ ListNode pNex

2016-11-17 20:51:29 293

原创 链表中倒数第k个节点

题目:输入一个链表,输出该链表(单向链表)的倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。如果一个链表有6个结点,从头开始就是1,2,3,4,5,6这个链表的倒数第3个结点就是4 如何查找思路1:先走到链表的尾部,然后回溯k步,但是由于是单项链表思路行不通思路2:先便利一次链表,获取列表的长度,然后倒数第k个结点就是从头结点开始,然后开始找到第n-k

2016-11-17 20:10:40 355

原创 排列组合的解决办法

在与硬件通信遇到一个问题。 需求是在后台记录硬件上传的错误信息.并记录在错误列表中分为80,40,20,10,08,04,01 情况(16进制) ,坑爹的是硬件上传的信息是累加和的形式。如80 40 各代表一个错误,但是他会上传一个C0(80+40)十六进制加法 表示 这次错误有两个类型的一个是80代表的错误一个是40代表的错误。是个累加和的情况如果是常规思路,是各种加减法的去排列组合,在7个的

2016-11-15 21:31:21 527

原创 调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分:基本思路:如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。由于每碰到一个偶数就需要移动O(n)个数字,因此总的时间复杂度是O(n2)。高

2016-11-14 21:37:09 323

原创 O(1)时间内删除单向链表中的一个节点

给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点 错误思路:从链表结点开始,循序便利查找要删除的结点,并在链表删除结点 正确思路:已知要删除的结点可得下一个结点,那么我们可以将下一个结点内容复制到当前结点。同时注意首位结点 public static void delete(ListNode head,ListNode target){ if(head==

2016-11-14 21:11:40 426

原创 从打印1到最大的n位数

题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999 错误代码//error void PrintToMaxOfNDigits_1(int n){ int number=1; int i=0; while (i++<n) number*=10;

2016-11-05 02:01:48 1119

dex2jar&jd-gui.rar

dex2jar&jd-gui.rar

2017-08-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除