算法
文章平均质量分 60
午后小夕
趁着青春,尽情挥洒,加油
展开
-
找出数组中的单个数值(C#)
数组查询算法 c#,leetcode原创 2023-10-01 15:15:31 · 449 阅读 · 0 评论 -
34.实现一个队列
实现一个队列,队列的应用场景为:一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列思路一:这就是操作系统中介绍的PV操作,队列的一个典型的应用模式。实现这个PV操作的过程中要注意两个线程之间的通信就可以了。#include "stdafx.h"#include #include #include #include #include原创 2015-07-14 21:44:03 · 573 阅读 · 0 评论 -
左旋转字符串
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)原创 2015-07-12 22:11:30 · 488 阅读 · 0 评论 -
二分查找树
~~~题目: 从线性结构转向支持快速查找和插入的结构。插入31,41,59,26的二分查找树。IntSetBST类定义了结点和根: private: int n,*v,vn; struct node { int val; node原创 2015-06-11 21:14:38 · 513 阅读 · 0 评论 -
25题~~字符串中找数字串
题目描述: 写一个函数,它的原型是 int continumax(char *outputstr,char *intputstr)功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回。并把这个最长数字串赋给其中一个函数参数outputstr 所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9原创 2015-06-11 21:54:02 · 508 阅读 · 0 评论 -
高效采样方法
方法一: 在一个初始为空的集合中插入随机整数,直到填入足够的整数,伪代码如下:initialize set S to emptysize=0while size t=bigrand()%n if t is not in S insert t into S size++ print th原创 2015-06-11 20:09:19 · 665 阅读 · 0 评论 -
链表就地逆置和合并
题目说明:(1)单链表就地逆置(2)合并链表 问题一分析: 逆置后的点链表初始为空,表中的节点不是新生成的,而是从原链表当中一次“删除”,再逐个头插到逆置表中。设逆置链表的初始态为空表,“删除”已知链表中的第一个节点,然后将它“插入”到逆置链表的“表头”,即使得他成为逆置链表中“新”的第一个节点,如此循环,直至原链表为空。假设有如下数据结构:原创 2015-05-21 22:06:16 · 952 阅读 · 0 评论 -
找出数组中任何相邻子向量的最大和
问题描述: 输入是一个具有n个浮点数字的向量x,其输出是在输入的任何相邻子向量中找出的最大和。例如,如果输入向量包含下面10个元素:31 -41 59 26 -53 58 97 -93 -23 84那么该程序将返回x[2...6]的总和。或187.当所有数都为正数时,最大和就是总和。当所有数都为负数时,最大总和子向量是空向量,空向量的总和为0。 方法一: 完成原创 2015-05-31 21:03:52 · 705 阅读 · 0 评论 -
猜牌问题
题目: 有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A,B,C三人额头上贴任意两张牌,A,B,C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A说不知道,B说不知道,C说不知道,然后A知道了。请问如何推理,A是怎么知道的,如果用程序,又怎么实现呢?推理如下:因为第一次三者都说不知道,则两两相加不可能出现四红或四蓝,则A,B,原创 2015-05-20 21:54:09 · 573 阅读 · 0 评论 -
求矩阵中的最大二维矩阵
求一个矩阵中最大的二维矩阵(元素和最大)。如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是: 4 55 3要求:(1)写出算法(2)分析时间复杂度(3)用c写出关键码3)达到O(n^2)for accumulation for each column,accumulate 0 to i(i=0,n-1)first,then calc原创 2015-07-14 21:56:33 · 619 阅读 · 0 评论 -
二叉树中两结点的最大差值
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这颗二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。intFindMaxSubMin(BinTree *root){ stack s; BinTree *p=root; intMaxNode = p->data; int原创 2015-08-14 17:40:59 · 847 阅读 · 0 评论 -
最长递增子序列
原创 2015-09-06 15:07:12 · 278 阅读 · 0 评论 -
KMP算法
KMP算法 【题目】 给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有字串match,则返回match在str中的开始位置,不含有则返回-1。 【举例】 str=“acbc”,match=“bc”。返回2。 str=“acbc”,match=“bcc”。返回-1。 【要求】 如果match的长度大于str长度(M>N),str必然原创 2015-08-21 21:50:16 · 562 阅读 · 0 评论 -
统计二进制中1的个数
题目:输入一个整数,求该整数的二进制表达式中有多少个1.例如,输入10,由于其二进制表示为1010,有两个1,因此输出 为2.int countOf1(int n){int c = 0;while (n != 0){n = n & (n - 1);c++;}return c;}another solution is to lookup原创 2015-09-08 13:01:47 · 496 阅读 · 0 评论 -
高效的算法找出中间所有A[i] = i的下标
给定一个排好升序的数组A[1]、A[2]、……、A[n],其元素的值都两两不相等。请设计一高效的算法找出中间所有A[i] = i的下标。并分析其复杂度。解析:首先分析一下这个数组,假设其中某个位置的A[i] = i,那么可以肯定的值,之前的A[x] > x,之后的A[x] 我给出的方法是二分查找,具体的做法是:我们假设一个新数组B,其元素是A[i] - i的值,这样原创 2015-08-16 17:16:07 · 3083 阅读 · 1 评论 -
换钱的方法数
原创 2015-07-24 13:45:59 · 836 阅读 · 0 评论 -
求两个串的最大公共子串
给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如,query为 "acbac",text为"acaccbabb",那么text中的"cba"为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。int getLongestSubString(char* query, char* tex原创 2015-08-14 19:45:28 · 762 阅读 · 0 评论 -
manacher算法
Manacher算法【题目】给定一个字符串str,返回str中的最长回文子串的长度。【举例】str=“123”。其中的最长回文子串“1”或者“2”或者“3”,所以返回1。str=“abc1234321ab”。其中的最长回文子串“1234321”,所以返回7。【进阶题目】给定一个字符串str,想通过添加字符的方式使得str整体都变成回文字符串,但要求只能在str的末尾添加原创 2015-08-15 15:13:47 · 453 阅读 · 0 评论 -
bfprt算法
bfprt算法及其相关找到无序数组中最小的K个数【题目】给定一个无序的整型数组arr,找到其中最小的k个数。【要求】如果数组arr的长度为N,排序之后自然可以得到最小的k个数,此时时间复杂度为排序的时间复杂度即O(N*logN)。本题要求读者实现时间复杂度O(N*logK)和O(N)的方法。利用堆: public int[] getMinKNumsByHeap原创 2015-08-15 15:55:37 · 921 阅读 · 0 评论 -
求两个数的和等于一个数的所有组合
题目: 输入两个整数n和m,从数列1,2,3.....n中随意取n个数,使其和等于m,要求将其中所有的可能组合列出来。// 递归方法 #include #include using namespace std;listlist1;void find_factor(int sum, int n){// 递归出口 if (n原创 2015-05-17 21:56:50 · 1035 阅读 · 0 评论 -
求二叉树中节点的最大距离..........
题目描述: 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间的边的个数。写一个程序,求一颗二叉树中相距最远的两个节点之间的距离。分析与解答:根据相距最远的两个节点一定是叶子节点这个规律,我们可以进一步讨论。对于任意一个节点,以该节点为根,假设这个根有K个孩子结点,那么相距最远的两个节点U和V之间的路径与这原创 2015-04-27 14:21:44 · 801 阅读 · 0 评论 -
从上到下,从左到右输出二叉树的结点
题目: 输入一颗二叉树,从上到下按层打印树的每个结点,同一层中按照从左往右的顺序打印。输出 8,6,10,5,7,9,11.分析:题目为树的层次遍历.(也即图的广度优先遍历)#include#includeusing namespace std;struct BTreeNode{int m_nValue;//value of nod原创 2015-05-05 22:16:51 · 2586 阅读 · 0 评论 -
判断是否为二叉树的后续遍历
题目要求: 判断整数序列是不是二元查找树的后续遍历结果。 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。 如果返回true,否则返回false. 因此返回true.如果输入7,4,6,5,没有那棵树的后序遍历的结果是这个序列,因此返回false.解析: 这是二叉查找树树后序遍历重建问题原创 2015-04-24 22:08:17 · 614 阅读 · 0 评论 -
颠倒句子中词的顺序
分析: 先颠倒整个句子,然后。颠倒词的顺序。例如: I am a teach. 颠倒后:teach a am i//Reverse the whole string,then reverse each word.char* reverseFixlen(char *str,int n){ char *p=str+n-1; char *start=str; while(原创 2015-04-20 22:26:37 · 2732 阅读 · 0 评论 -
求数组中的重复值
题目描述: 假设 你用一个1001个整数组的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间,此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个整数做一次处理,用一种算法找出重复的那个数字。(不用辅助的存储方式)1.sum up all the number,then subtract the sum from 1001原创 2015-04-24 12:44:52 · 823 阅读 · 0 评论 -
颠倒字符串
题目:颠倒一个字符串,优化速度,优化空间。void reverse(char *str){reverseFixlen(str,strlen(str));}void reverseFixlen(char*str,int n){char* p=str+n-1;while (str{char c=*str;*str=*p;*p=c;++st原创 2015-04-19 11:41:14 · 586 阅读 · 0 评论 -
字符串比较
题目:比较两个字符串,O(n)时间。int strcmp(char*p1, char*p2){while (*p1 != '\0'&&*p2 != '\0'&&*p1 == *p2){p1++; p2++;}if (*p1 == '\0'&&*p2 == '\0')return 0;if (*p1 == '\0')return -1;if (*p转载 2015-04-22 22:34:16 · 439 阅读 · 0 评论 -
倒排链表(修订版)
题目:Node* reverse(Node* head){ if (head==NULL) return head; if(head->next==NULL) return head; Node* ph=reverse(head->next); head->next->next=head; head->next=NULL;原创 2015-04-18 22:30:18 · 1589 阅读 · 5 评论 -
算法题8
题目: 有两个房间,一个房间有3盏灯。但是没有开关。在另一个房间里控制着三盏灯的三个开关。这两个房间是分割开的,从一个房间看不到另一个房间的情况。要求受训者分别进房间一次,然后判断这三盏灯分别是由那个开关控制的。答案: 把开关编号为1,2,3。在3个开关房间里,打开开关1,开上几分钟,再关掉,打开开关2,马上进入3盏灯的房间,亮的灯当然是开关2控制,用手摸另原创 2015-04-18 21:56:42 · 414 阅读 · 0 评论 -
算法100题(第7题)
题目:判断两个单链表是否相交给出两个单链表的头指针,比如h1,h2,判断这两个链表是否相交。为了简化问题,假设两个链表均不带环问题扩展:1.如果链表可能有环列。2.如果需要求出两个链表相交的第一个节点列?struct Node{int data; Node* next;};//if there is no cycleint isJoinedSi原创 2015-04-17 22:07:51 · 377 阅读 · 0 评论 -
求最小的k个元素
题目: 输入n个整数,输出其中最小的k个。 例如:1,2,3,4,5,6,7,8 则最小的4个数为1,2,3,4,#includeusing namespace std;class MinK{public:MinK(int *arr, int si) :array(arr), size(si){}bool kmin(int k, in原创 2015-04-27 13:28:36 · 612 阅读 · 0 评论 -
求上排的数在下排出现的次数
题目: 举一个例子: 数值:0,1,2,3,4,5,6,7,8,9 分配:6,2,1,0,0,0,1,0,0,0 0在下排出现了6次,1在下排出现了2次。 2在下排出现了一次,。。。。。 以此类推#include using namespace std;#define len 10cl原创 2015-04-27 14:14:04 · 658 阅读 · 0 评论 -
将字符串转换为整数并输出
题目: 输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串”345”,则输出整数345最后一个需要考虑的问题是溢出问题,由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数而溢出。原创 2015-05-11 22:07:58 · 1649 阅读 · 0 评论 -
将二叉查找树转换为其镜像
题目: 输入一颗二元查找树,将该数转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:输出:定义二元查找树的结点为:struct BSTreeNode{int m_nValue; //value of nodeBSTreeNode *m_pLeft; //left ch原创 2015-05-05 16:57:09 · 601 阅读 · 0 评论 -
求单链表倒数第k个结点
题目: 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。分析: 设置两个指针p1,p2。首先p1和p2都指向head。然后p2向前走k步,这样p1和p2之间就间隔k个节点,然后p1和p2同....#include#include#includeusing namespace std;struc原创 2015-05-05 10:45:43 · 582 阅读 · 0 评论 -
求n个数的和
题目: 求1+2+3+4+....n(要求不能使用乘除法,for,while,if,else,switch ,case等关键字,以及条件判断语句(A?B:C).解法一: 循环只是让相同的代码执行n遍而已,我们完全可以不用for和while达到这个效果,比如定义一个类,我们new一含有n个这种类型元素的数组,那么该类的构造函数将确定会被调用n次,我们可以将需要执行原创 2015-05-05 09:03:41 · 1807 阅读 · 0 评论 -
有序数组中两个数的和等于一个输入值的函数
题目: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度为O(N). 如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1,2,4,7,11,15和数字15,由于4+11=15,因此输出4和11.原创 2015-05-05 11:16:48 · 1034 阅读 · 0 评论 -
求Fibonacci数列的第n项
题目: 定义Fibonacci数列如下:方法一: 递归的方法,代码如下:#includeusing namespace std;int Fibona(int n){int m;if (n == 0)return 0;else if (n == 1 || n == 2)return 1;else{m = Fibon原创 2015-05-11 17:17:38 · 962 阅读 · 0 评论 -
删除第m个数字
题目:n个数字(0,1,2,.....n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字),当一个数字删除后,从被删除数字的下一个继续删除第m个数。找出这个圆圈中剩下的最后一个数字。原创 2015-05-08 22:15:38 · 560 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。例如: 输入abaccdeff,则输出b思路剖析: 由于题目与字符出现的次数相关,可以统计每个字符在该字符串中出现的次数。要达到这个目的,需要一个数据容器来存放每个字符出现的次数。在这个数据容器中可以根据字符来查找它出现的次数。在常用的数据容器中,哈希表正是这个用途。由于字符是一个长度为8的数据类型,因此总原创 2015-05-08 17:03:55 · 2122 阅读 · 0 评论