
算法
mr_phy
这个作者很懒,什么都没留下…
展开
-
leetcode 第21题<Merge Two Sorted Lists>(java)
题面 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.审题linked list 考察链表结构 合并两个有序的链表,使之成为一个新(有序的)表。新表由先前的两个原创 2017-03-13 17:54:09 · 416 阅读 · 0 评论 -
归并排序
综述归并排序是建立在归并操作上的一种有效的排序算法。这个算法是分治法的一个典型的应用。1.有序数组合并有序数组合并非常简单,只要比较两个数组中最小的数,谁小就取谁。然后把取了的数删除,继续比较。如果一个数组为空,则取另一个数组的元素。 这个方法时间复杂度为O(n)public void MemeryArray(int[] a,int n,int[] b,int m,int c[]){ in原创 2017-04-13 12:13:03 · 356 阅读 · 0 评论 -
快速排序(Java)
综述排序算法从使用硬件上分为:内部排序和外部排序。 内部排序又分为插入排序,选择排序,交换排序,归并排序和基数排序。 内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的记录,在排序过程中需要访问外存。 快速排序:这是目前基于比较的内部排序中被认为是最好的方法。当待排序的关键字是随机分布的时候,它的时间最短。需要重点掌握。排序算法详解直接插入排序这是最简单的排序原创 2017-03-03 11:32:25 · 343 阅读 · 0 评论 -
把数组排成最小的数
问题输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路比较简单的思路:把一个数组按某一种规则排序; 这种规则是nm>mn,则mCodeimport java.util.ArrayList;public class Solution { public String原创 2017-04-12 15:25:22 · 337 阅读 · 0 评论 -
剑指offer第五题
题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路本来想的很简单,从stack1往stack2中一倒就把“后进先出”倒成了“先进先出”。 但是这个思路有一个问题,就是stack2里面有元素的时候。本来他应该先出的,反倒在stack2中先进,变成了后出 所以应该把stack2分成两种情况 一种它为空,用原来的思路,另一种它不为空,就直接从stack2里面原创 2017-04-03 11:33:52 · 385 阅读 · 0 评论 -
剑指offer第四题
题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路通过root结点可以把中序遍历分成两部分。可以知道左子树的个数和右子树的个数。从而求出前序遍历和中序遍历相对应的左子树和右子树。 并通过递归求出。 递归方原创 2017-04-02 22:43:41 · 704 阅读 · 0 评论 -
剑指offer第三题
题目输入一个链表,从尾到头打印链表每个节点的值思路建立一个栈,先把数据存到栈里面。Code/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }*原创 2017-04-02 21:02:19 · 361 阅读 · 0 评论 -
剑指offer第二题
题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路最直观的做法是从头往后开始扫描,但是这样复杂度为O(n^2) O(n)的做法是从后往前开始复制和替换。 先求出替换后的字符串大小,然后用两个指针(index)从后往前复制,如果遇上空格,直接替换为%20Codepublic class原创 2017-04-02 19:42:32 · 465 阅读 · 0 评论 -
全排序算法
问题输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 思考如果字符串没有重复的内容,可以使用递归: 例如abc可以考虑a(bc),b(ac),c(ab),三种情况 而括号里面的继续按照外面的顺序递归求出。 但是如果字符串里有重复的呢? a(bb),b(ab),b(ab原创 2017-04-10 15:11:51 · 477 阅读 · 0 评论 -
深度优先搜索
深度优先搜索算法(DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能的搜索树的分支。当节点v所在的边都已经被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择一个作为源节点并重复以上过程,整个进程反复进行直到所有节点被访问到位置。属于盲目搜索。DFS可以产生目标图的相应拓扑排序表,利用拓扑排序原创 2017-03-14 11:28:28 · 531 阅读 · 0 评论 -
寻找中序遍历下一个节点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路 可以发现,情况分为两类: - 第一类:给定的节点包含右子树,则下一个节点一定在右子树中。是这个节点右子树的最左子节点。 - 第二类:给定的节点不包含右子树。有两种情况: - 该节点是父节点的左子树,则下一个节点就是这个父节点。 - 该节点是父节原创 2017-05-09 10:40:22 · 433 阅读 · 0 评论