DataStructure_Algorithm
文章平均质量分 79
feliciafay
开发工程师
展开
-
《算法导论》第七章 quicksort
<br />根据《算法导论》第七章,写了代码如下:<br />// QuickSort.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <fstream>using namespace std;#define N 1000void quickSort(int* a,int p, int r);int原创 2010-11-29 09:52:00 · 1019 阅读 · 0 评论 -
《算法导论》第一章~第五章 要点笔记
short circuitingThe boolean operators "and" and "or" are short circuiting. That is, when we evaluate the expression "x and y" we first evaluate x. If x evaluates to FALSE, then the entire expression cannot evaluate to TRUE, and so we do not evaluate y. If,原创 2010-11-29 10:46:00 · 1069 阅读 · 0 评论 -
《算法导论》第六章 heapsort
根据《算法导论》第六章,写了heapsort的代码,如下:// HeapSort.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include using namespace std;#define N 1000void HeapSort(int *a, int &heapsizeA);void BuildMax原创 2010-11-29 09:49:00 · 719 阅读 · 0 评论 -
《如何求解问题+现代启发式方法(Modern Heuristics)》读书笔记2
<br />如果说这本书的主菜是对启发式算法的介绍,那么开胃酒就是点缀其间的小问题了。如果把这些每个小问题整理整理,形成若干小主题,那么将会非常有意思。<br /> <br />主题一 扩大你的搜索空间<br />1 卓上有六根火柴棒,请搭建四个三角形。<br />问题的形式暗示这是一个二维的平面,这个形式误导了我们,使我们限制于此空间,难以求解。<br /> <br />然而,如果改变搜索空间。比如,假设是在三维空间中,六根火柴就可以完成搭建四个三角形的任务。<br /> <br /> <br /><br原创 2011-02-24 01:16:00 · 2076 阅读 · 0 评论 -
《如何求解问题+现代启发式方法(Modern Heuristics)》读书笔记1
@@问题=>模型=>求解求解问题的时候,我们其实往往是先把问题描述为一个模型,然后给问题的模型求解@@证明问题的基本思路1演绎法2归纳法3反证法4把这个问题转换为它的逆否命题再做证明@@对算法进行分类第一类:评估子空间而非个体解贪婪算法、动态规划、分枝界定法第二类:将整个搜索空间看成潜在解的统一集合,只评估单个完整解,而没有子空间的概念。 爬山法、模拟退火、禁忌搜索第三类:演化算法 结合以上两类的特点,允许个体既描述子空间,又描述特定解@@候选解的组织形式SAT问题可以用树的形式来原创 2011-02-22 17:12:00 · 2098 阅读 · 1 评论 -
已知二叉树的中序遍历和后序遍历,如何求前序遍历
上文在已知二叉树的前序遍历和中序遍历的情况下,求出了后序遍历。那么,对称地,如果已知二叉树的后序遍历和中序遍历,如何求前序遍历呢?其实思路与上文完全类似。代码如下:// InPost2Pre.cpp : Defines the entry point for原创 2011-09-24 17:35:03 · 2904 阅读 · 0 评论 -
单链表要点总结
一、单链表创建时的3个指针head, p, qhead指向链表的第一个节点。q指向链表的最后一个节点。p当运输工,指向一个待插入的节点(要用newListNode申请空间),然后将插入至q之后。 二、单链表插入时的4个指针Head, r, q, pNode原创 2011-10-04 09:31:51 · 1375 阅读 · 0 评论 -
使用环形链表实现约瑟夫环
链表实现Josephus约瑟夫环问题如下,输出每轮杀掉的人的编号,并且输出最后剩下的一名幸运者。头文件如下#ifndef JOSEPHLIST_H#define JOSEPHLIST_H#include typedef struct node *link;struct node{ int item; link next;};link make_node(原创 2013-08-11 11:16:38 · 2907 阅读 · 0 评论 -
排序算法整理(6)堆排序的应用,top K 问题
top K问题是这样的,给定一组任意顺序的数,假设有n个。如何尽快地找到它们的前K个最大的数?首先,既然是找前K个最大的数,那么最直观的办法是,n个数全部都排序,然后挑出前K个最大数。但是这样显然做了一些不必要的事儿。利用堆这种数据结构,借助前文《排序算法整理(5)堆排序》中谈到的维护堆的函数, min_heapify( ),就可以轻松解决top K问题。主要步骤如下:step 1原创 2013-10-03 12:51:27 · 8882 阅读 · 0 评论 -
堆的节点总数n和叶结点数目的关系 (CLRS习题 6.1-7)
来自算法道路CLRS的一个习题。Chapter 6 Heap Sort. Exercise6.1-7 Show that, with the array representationfor storing an n-element heap, the leaves are the nodes indexed by ⌊n/2⌋ + 1, ⌊n/2⌋ + 2, . . . , n.原创 2013-10-19 11:15:45 · 4386 阅读 · 2 评论 -
排序算法整理(5)堆排序
程序参考了CLRS的《算法导论》,第六章 Heap Sort,由于最大堆和最小堆是对称的,所以下文都说最大堆。1 堆的定义最大堆就是这样一种树,每个节点而言,如果它有儿子,那么此节点比它的儿子都大。需要注意的有两点。首先,堆几乎是一种完全二叉树。它在最低层(叶节点层)可能是完全的,也可能是不完全的,在其它层一定是完全的。其次,如果要用数组array来表示堆。那么必需两个原创 2013-10-02 19:35:59 · 1842 阅读 · 1 评论 -
看图理解单链表的反转
如何把一个单链表进行反转?方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。方法2:使用3个指针遍历单链表,逐个链接点进行反转。方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 方法1:浪费空间。 方法2:使用p和q两个指针配合工作,使得两个节点间的指向反向,同时用r记录原创 2011-10-02 22:36:31 · 92029 阅读 · 30 评论 -
DesignPatterns(01)Singleton
这里展示的是最简单的Singleton(单例模式),不考虑多线程,因此也就没有考虑线程安全和加锁的话题了。Singleton类的定义//Singleton Definitionclass Singleton{public: static Singleton* getInstance();private: Singleton(){ std::cout<<原创 2014-02-13 07:50:24 · 935 阅读 · 0 评论 -
Prim's Minimal Spanning Tree_Prim(最小生成树的Prim算法)
题目:最小生成树是什么?在图的一堆点(假设有V个)中,有些两点之间有边,有些两点之间没有边。对于两点之间的边,权重有大有小,目标是找到一些边,使得图是联通的并且这些边的和最小。算法:贪心。代码:(搬运自GeeksForGeeks)#ifndef MST_Prim_Solution_h#define MST_Prim_Solution_h#include #in原创 2014-02-13 08:56:58 · 2216 阅读 · 0 评论 -
LeetCode(145)Binary Tree Postorder Traversal
题目如下:Given a binary tree, return the postorder traversal of its nodes' values. 1 \ 2 / 3return [3,2,1].Note: Recursive solution is trivial, could you do it iteratively?原创 2014-01-16 04:01:50 · 4506 阅读 · 1 评论 -
LeetCode主题整理(1)滤重问题
下面都是滤重题目。(25)Remove duplicate给定一个数,给定一个数组,删除数组中的这个数,修改原数组使得新数组为去掉了这个数之后的剩下元素构成的数组并返回新数组的长度。通过交换来避免数组删除时的逐个移动,从而降低时间复杂度。(26)Remove duplicate from sorted Array排序数组滤重。考虑两种做法。第1种常规,每次都原创 2014-01-11 10:49:28 · 1378 阅读 · 0 评论 -
LeetCode(114)Flatten Binary Tree to Linked List
题目分析Given a binary tree, flatten it to a linked list in-place.For example,Given 1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:原创 2014-01-17 15:40:51 · 1672 阅读 · 0 评论 -
LeetCode(144)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 / 3return [1,2,3].Note: Recursive solution原创 2014-01-15 06:29:16 · 2383 阅读 · 0 评论 -
LeetCode(96)Binary Tree Inorder Traversal
题目如下:Given a binary tree, return the inorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3}, 1 \ 2 / 3return [1,3,2].Note: Recursive solution原创 2014-01-15 06:25:40 · 1204 阅读 · 0 评论 -
LeetCode(112)Path Sum
题目如下:My SubmissionsGiven a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.For example:Given the bel原创 2014-02-18 08:13:00 · 1048 阅读 · 0 评论 -
LeetCode(137)Single NumberII
题目如下:Given an array of integers, every element appears three times except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it withou原创 2014-02-09 10:15:27 · 4064 阅读 · 2 评论 -
LeetCode(99)Recover Binary Search Tree
题目如下:Two elements of a binary search tree (BST) are swapped by mistake.Recover the tree without changing its structure.Note:A solution using O(n) space is pretty straight forward. Could yo原创 2014-01-17 14:23:23 · 1276 阅读 · 1 评论 -
LeetCode(75)Sort Colors (荷兰三色旗问题 Dutch National Flag)
题目如下:The flag of the Netherlands consists of three colours: red, white and blue. Given balls of these three colours arranged randomly in a line (the actual number of balls does not matter), the task原创 2014-02-10 03:42:16 · 5901 阅读 · 0 评论 -
LeetCode(120)Triangle
题目如下:Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.For example, given the following triangle[ [2], [3,4],原创 2014-02-27 23:50:35 · 2524 阅读 · 0 评论 -
多数投票算法 Majority Vote Algorithm
题目如下:Write a program to find the element in an array that is repeated more than half number of times. Return -1 if no such element is found.分析如下:最容易想到的办法是,用一个hash或者map去统计每个元素的出现次数,然后得出答案。时间复杂度为O原创 2014-01-30 04:19:22 · 16044 阅读 · 0 评论 -
LeetCode(63)UniquePath2
题目如下:Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as 1 and 0 respectively in the原创 2014-03-05 02:54:10 · 1627 阅读 · 0 评论 -
LeetCode主题整理(4)链表及相关问题
Topic 1 反转链表 Reverse Linked List II 在第m~n个节点中反转单链表,注意这道题可以把代码写得很长,如果分为区间一[0,m-1],区间二[m-n],区间三[n+1,end]这三个区间的话。也可以写得很短,如果仔细观察发现其实只需要考虑第一个区间是否为NULL就可以了。 Reverse Nodes in原创 2014-02-06 01:59:04 · 3341 阅读 · 0 评论 -
LeetCode主题整理(2)树问题和相关问题
Topic 1: 关于遍历 和树相关的第一个重要主题,是遍历。前序遍历(根,左子树,右子树),中序遍历(左子树,根,右子树),后序遍历(左子树,右子树,根),层序遍历(第一层也就是根节点所在的那层,第二层.....最后一层也就是叶节点所在的那层)是常见问题。 前序,中序,后序,使用递归都非常好些,比较困难的解法是,如何用非递归的方式来遍历。按照代码的难度升序,是前序,中原创 2014-01-20 05:36:07 · 1781 阅读 · 0 评论 -
LeetCode(34)SearchInsertPosition
原始题目:Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume no duplicates in the a原创 2014-03-07 03:18:17 · 869 阅读 · 0 评论 -
[面试题] Add Two String 求两个string型数字的和
题目:输入string a, string b,求a和b的和,并且将和也用string型式返回。分析:来自F的面试题,编程基本功练习。模拟加法,和leetcode上的这道题比较像。 知道如何把对string型的'9'和int型的9进行相互转换即可。我的代码:#ifndef Add_String_Solution_h#define Add_String_Solution_h#原创 2014-02-14 05:31:03 · 1218 阅读 · 0 评论 -
ACM训练方案-POJ题目分类
(转载自这里)ACM online Judge中国:浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天转载 2014-03-13 04:15:28 · 2736 阅读 · 0 评论 -
Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
TreesTree is a recursive structure.math nodes https://class.coursera.org/principlescomputing-001/wiki/view?page=trees代码,普通的树 http://www.codeskulptor.org/#poc_tree.py代码,含有parent原创 2014-07-27 09:17:50 · 6539 阅读 · 2 评论 -
LeetCode(111)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.题目分析:挺有意思的一道题目,corner cased a原创 2014-01-17 09:03:53 · 1750 阅读 · 0 评论 -
Leetcode(104)Maximum Depth of Binary Tree
题目如下:Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.原创 2014-10-07 04:40:36 · 1080 阅读 · 0 评论 -
LeetCode(100)Same Tree
现在开始按照AC率降序刷题,接下来的这几道题目确实都是挺简单的。题目如下:Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the n原创 2014-01-09 06:41:21 · 4185 阅读 · 0 评论 -
LeetCode(70)Climbing Stairs
题目如下:You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?分析如下:看到这里这段评论写得挺好原创 2014-01-20 16:28:51 · 846 阅读 · 0 评论 -
LeetCode(83)Remove Duplicates from Sorted List
题目如下:Given a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3.题目分析:本题是给定一个链表,对链表原创 2014-01-10 08:06:49 · 4002 阅读 · 1 评论 -
LeetCode(61)UniquePath1
题目如下:A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach原创 2014-03-01 08:54:49 · 2295 阅读 · 0 评论 -
LeetCode(101)Symmetric Tree
题目如下:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \3 4 4 3But原创 2014-01-17 06:48:54 · 3725 阅读 · 0 评论 -
LeetCode(110)Balanced Binary Tree
题目如下:分析如下:之前尝试一边计算深度,一边做判断,发现这是无法实现的。因为bool型的返回变量说明了返回值没有深度信息,而如果没有深度信息,那么就无法判断左子树和右子树的深度差是否为1.所以说明还要另外使用一个计算深度的函数来做辅助了。我的代码:看了一下,是个很正常的代码风格。// 104ms过大集合/** * Definition for binary tre原创 2014-01-16 07:46:33 · 6671 阅读 · 1 评论