数据结构与算法分析
zdavb
这个作者很懒,什么都没留下…
展开
-
数据结构与算法分析第二章读书笔记
这本书第二章引发了一个问题,求最大子序列和,并给出了四种解题算法进行对比。问题描述:给定一个数组,求出该数组的最大子序列。算法1暴力搜索:即找出所有的子序列,并对其求和来与最大值比较。时间复杂度为O(n3);int maxSum1(int sum[],int start,int end){ int i,j,k; int maxSum = 0; int tmpSum;原创 2015-07-22 10:39:00 · 1367 阅读 · 0 评论 -
前缀表达式、中缀表达式、后缀表达式
中缀表达式就是我们日常看到的数学表达式:比如(2+4)*2,对于人类来说很直观,但是对于计算机而言,这种表达式很不容易理解。于是就有了前缀表达式和后缀表达式。前缀表达式前缀表达式是指将操作符放在前面,然后再放置操作数,比如对前面表达式而言,前缀表达式为*、+、2、4、2;后缀表达式后缀表达式是指将先放操作数,然后再放操作符,比如对签名表达式而言,后缀表达式为2、4、+、2、*可以总结出规律,前缀表达原创 2016-04-06 22:13:08 · 10771 阅读 · 0 评论 -
数据结构与算法分析2.16
问题描述:不用递归,写出快速求幂的程序分析:快速求幂,首先构造出一个base数组,其实base[i+1] = base[i]*base[i]。然后遍历指数中的二进制数,当前位(0或者1)与对应的base数组相乘。代码如下:int getSize(int y) { int size = 0; while (y) { y = y >> 1; size++;原创 2015-09-22 22:41:55 · 712 阅读 · 0 评论 -
数据结构与算法分析第二章12题
问题描述: 1、求最小子序列和 2、求最小正子序列和 3、求最大子序列乘积分析: 1、求最小子序列和其实和求最大子序列和是一样一样的。 最高效的O(N)的时间复杂度算法思想是: 假设有N个元素的数组,最大子序列和为从i到j。那么想想【i,j】是否可以继续向左右扩展呢?如果不能,制约条件是什么?对于最大子序列而言,如果可以向左扩展到i’,即[i’,i],那因为[i,j]位最大子序列,所以[原创 2015-09-22 20:57:40 · 354 阅读 · 0 评论 -
数据结构与算法分析2.19题
问题描述: 编写一个程序求解主要元素。(何为主要元素:当某个元素在数组中出现的次数大于数组个数的一半时,该元素即为主要元素)。分析:这道题在leetcode上出现过,思想是如果将主要元素摞成一摞,然后将非主要元素摞成另一摞,因为主要元素的个数要占数组个数的一半以上,所以,非主要元素的高度一定小于主要元素的高度。那么一层一层的往下削,削到最后时还剩下的一定是主要元素。现在的困难是我们并不知道谁是主要原创 2015-09-23 08:59:11 · 1084 阅读 · 2 评论 -
【leetcode-14】Longest Common Prefix(java)
问题描述: Write a function to find the longest common prefix string amongst an array of strings.代码如下:328ms public String longestCommonPrefix(String[] strs) { int row = strs.length; i原创 2015-07-24 14:04:49 · 598 阅读 · 0 评论 -
[leetcode-3]Longest Substring Without Repeating Characters(java)
问题描述: Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3原创 2015-07-23 09:32:25 · 361 阅读 · 0 评论 -
只使用处理IO的printDigit函数,编写一个过程以输出任意实数
//只使用处理IO的printDigit函数,编写一个过程以输出任意实数(可以为负)#include <iostream>using namespace std;void printDigit(int num){ printf("%d",num);}void printOut(int num){ if(num>10) printOut(num/10);原创 2015-07-22 16:35:39 · 4525 阅读 · 0 评论 -
【数据结构与算法分析1.2】编写一个程序求解字谜游戏问题
问题描述:输入是由一些字母和单词构成的二维数组,目标是找出字谜中的单词,这些单词可以是水平、垂直或沿对角线以任何方向放置。找出二维数组中所有的单词写完这个程序,手都要断掉了,太TM麻烦了,而且效率很低,到底有多少个for循环,自己都数不清。//1.2编写一个程序求解字谜游戏问题#include <iostream>using namespace std;/** directions:原创 2015-07-22 15:15:12 · 6710 阅读 · 0 评论 -
数据结构与算法分析(C)1.4
问题描述:编写一个程序,使它读入被include语句修饰的一个文件并且输出这个文件。分析:这道题的思路很简单,首先,读入源文件,然后在源文件中查找#include,然后获取包含的文件名,然后fread到内存中,如此继续下去。 有个问题纠结了很久:当在查找过程中发现strcpy(include,”#include”);时也会出现”#include”字符,应该对它进行过滤。//include zuho原创 2015-07-22 22:15:32 · 1273 阅读 · 0 评论 -
数据结构与算法分析(C语言描述)L1.1
1.1编写一个程序解决选择问题,令k = N/2.画出表格显示你的程序对于N为不同值的运行时间。代码如下:#include #include using namespace std;int select(int A[],int k,int n){ int *minHeap = (int *)malloc(sizeof(int)*k); int heapSize = 0; in原创 2015-07-22 12:17:41 · 1774 阅读 · 0 评论 -
数据结构与算法分析1.8
问题描述:2^100(mod 5)是多少?代码如下://1.8 2^100 (mod 5)#include <iostream>using namespace std;int pow(int m,int n,int d)//m^n mod d{ int index = 1; int base = m%d;//when index = 1 while(index*2<=n原创 2015-07-22 19:38:13 · 997 阅读 · 0 评论 -
Morris遍历二叉树
通常,我们遍历一颗二叉树都会采用递归的方式,即前序遍历、中序遍历和后序遍历,这三种方法的时间复杂度为O(N),空间复杂度为O(logN);而Morris算法遍历一颗二叉树的时间复杂度为O(2N),空间复杂度为O(1).可以想象这是一件很吸引人的特性。 二叉树是一种非线性的结构,而前面说的三种遍历方法实际上是将非线性转换成线性的过程。即将一个树转变成一个链表的过程。那么除了链表的头和尾外,每个中间点原创 2016-06-13 08:51:37 · 595 阅读 · 0 评论