算法
文章平均质量分 67
汤的Blog
这个作者很懒,什么都没留下…
展开
-
单链表回文结构判断
题目描述: 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->2->2->1 返回:true 题目解析: 思路1:空间O(n) 整个链表遍历两边, 开一个栈,第一遍遍历把链表中每个元素push进转载 2016-05-12 15:12:07 · 1976 阅读 · 0 评论 -
leetcode:copy-list-with-random-pointer
一、题目描述 A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 二、题目分析 我们知道如果是简原创 2016-09-12 17:48:24 · 227 阅读 · 0 评论 -
leetcode:word-break
1.题目描述 Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s ="leetcode", dic原创 2016-07-20 11:18:39 · 255 阅读 · 0 评论 -
leetcode:linked-list-cycle-ii
题目描述: Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follow up: Can you solve it without using extra space? 1.题目理解 什么叫有环?例如:A->B->C->D->E原创 2016-07-19 10:25:29 · 245 阅读 · 0 评论 -
leetcode:word-break-ii
1.题目描述 Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all such possible sentences. For example,原创 2016-07-26 11:45:15 · 335 阅读 · 0 评论 -
排序总结
排序的稳定性,排序稳定对于某些特殊需求来说是至关重要的。 内排序与外排序:将排序记录全部放置在内存中就是内排序,外排序需要在内外存之间多次交换数据才能进行。 内排序分类:插入排序,交换排序,选择排序,归并排序。 插入排序类:直接插入排序,希尔排序 选择排序类:简单选择排序,堆排序 交换排序类:冒泡排序,快速排序 归并排序类:归并排序 简单排序:冒泡,简单选择,直接插入原创 2016-06-06 10:17:10 · 318 阅读 · 0 评论 -
排序:快速排序
1.概述 快速排序是最慢的冒泡排序的升级,它们都属于交换排序类。也是通过不断比较的移动交换来实现交换的,与冒泡排序相比,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。 基本思想是: 通过一趟排序将待排序记录分割成成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记原创 2016-06-05 22:45:58 · 393 阅读 · 0 评论 -
leetcode:binary-tree-preorder-traversal
题目描述: Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree{1,#,2,3}, 1 \ 2 / 3 return[1,2,3]. 实现: 1.递归方式 cl转载 2016-05-23 22:19:13 · 187 阅读 · 0 评论 -
排序:堆排序
1.概述 首先堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右节点的值,称为最大堆。或者每个节点的值都小于或等于其左右孩子的值,称为最小堆。 注意二叉堆采用的数组的第一个元素不用,这样当节点为i时,2i为其左子节点,2i+1为qi右子节点,i/2为其父节点。 堆排序是利用最大堆进行排序的方法。基本思想是:将待排序的序列构造成一个最大堆,整个序列的最大值就是堆顶的根节点。将其与堆数原创 2016-06-04 20:53:20 · 254 阅读 · 0 评论 -
leetcode:binary-tree-postorder-traversal
题目描述:树的后序遍历 Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree{1,#,2,3}, 1 \ 2 / 3 return[3,2,1]. 实现: 1.递转载 2016-05-22 22:36:10 · 256 阅读 · 0 评论 -
leetcode:Minimum Depth of Binary Tree
题目描述: Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.(从根节点到叶节点经过的最短路径经过的节点数) 实现: 1转载 2016-05-20 21:28:52 · 207 阅读 · 0 评论 -
排序:希尔排序
1.概述 希尔排序是突破时间复杂度为O(n2)的第一批算法。 我们分析直接插入排序,当我们的记录是基本有序的时候,只需要少量的插入操作就可以完成整个记录的排序工作,此时直接插入很高效。还有就是记录比较少的时候,直接插入的优势也比较明显。我们把原本有大量记录数的记录进行分组分割成若干个子序列,此时每个子序列待排序的记录数就比较少了,然后对这些子序列分别进行直接插入排序,当整个序列都基本有序时,再原创 2016-06-03 22:32:33 · 229 阅读 · 0 评论 -
排序:直接插入排序
1.概述 直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 2.实现 进行N-1趟排序,第P趟的时候,位置0到P的元素为已排序状态。 void insertaion_sort(int A[],int N) { int i,j; for(i=1;i<N;i++) { if(A[i]<A[i-1]) { int tmp=A原创 2016-06-03 15:57:08 · 272 阅读 · 0 评论 -
排序:简单选择排序
1.概述 不同于冒泡排序的两两交换,选择排序是先找到合适的关键字再做交换,并且只移动一次就完成相应关键字的排序工作。通过n-i次关键字间的比较,从n-i+1个记录中选出关键字做小的记录,并和第i个记录交换之。 2.实现 void swap(int A[],int i,int j) { int tmp=A[i]; A[i]=A[j]; A[j]=tmp; } vo原创 2016-06-02 19:55:09 · 240 阅读 · 0 评论 -
leetcode:sort-list
1.题目描述 Sort a linked list in O(n log n) time using constant space complexity。 2.实现 (1)堆排序实现,它的时间复杂度为O(n log n),但是由于堆排序的实现都是用数组,所以先将链表转化为数组,将数组的元素进行堆排序之后,再将元素转化为链表。 class Solution { public: i原创 2016-06-07 15:33:10 · 287 阅读 · 0 评论 -
排序:归并排序
1.概述 采用分治策略,将问题分为一些小的问题然后递归求解,而治的阶段则是将分的阶段解得各个答案合并在一起。现将一个序列分为只有1,2元素的子序列,然后两两合并。 2.实现 对一个具有N个元素的数组进行归并排序 void Merge_sort(int A[],int N) { int *dstArray; dstArray=(int*)malloc(N*sizeof(int)); i原创 2016-06-01 22:35:47 · 291 阅读 · 0 评论 -
排序:冒泡排序
1.概述 冒泡排序,是一种交换排序,他的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 2. 第一种实现: void swap(int A[],int i,int j) { int tmp=A[i]; A[i]=A[j]; A[j]=tmp; } void Bubble_sort(int A[],int length) { int i,j; for原创 2016-06-02 16:02:07 · 213 阅读 · 0 评论 -
leetcode:clone graph
1 /** 2 * Definition for undirected graph. 3 * struct UndirectedGraphNode { 4 * int label; 5 * vector neighbors; 6 * UndirectedGraphNode(int x) : label(x) {}; 7 * }; 8 */ 9转载 2016-05-31 16:22:16 · 266 阅读 · 0 评论 -
leetcode:single-number,single-number ii
一. 题目描述 single-number: Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. C原创 2016-09-19 22:25:49 · 238 阅读 · 0 评论