
数据结构与算法
文章平均质量分 52
handsome_ZHANG
因为梦想,所以相信
展开
-
524. 通过删除字母匹配到字典里最长单词
题目:给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出:"apple"示例 2:输入:s = "abpcplea", d = ["a","b","c"]输出:"a"说明:所有输入的字符串只包含小写字母。字典的大原创 2020-05-13 23:33:24 · 298 阅读 · 0 评论 -
全排列生成算法
/*输出1~n的全排列*/#include<cstdio>const int maxn=11;//P为当前排列,hashTable记录整数x是否已经在P中int n,P[maxn] ,hashTable[maxn] = {false};//当前处理排列的第index号位void generateP(int index){ if(index==n+1)//递归边界,已经处理完排列的1原创 2017-10-01 20:05:20 · 268 阅读 · 0 评论 -
八皇后问题
1.八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。2.暴力法求解:#include<cstdio>#include<cmath>using namespace std; const int maxn=11;int count=0; //P为当前原创 2017-10-01 21:08:59 · 345 阅读 · 0 评论 -
排序算法
1.插入排序(insertion sort)void insertsort(int A[N]){ for(int i=2;i<=N;i++)//进行N-1趟排序 { int temp=A[i],j=i;//temp临时存放A[i],j从i开始往前枚举 while( j>1 && temp<A[j-1] ) //只要temp小于前一个元素A[j-原创 2017-08-29 21:11:26 · 168 阅读 · 0 评论 -
实现逆向输出
1.设L为带头结点的单链表,编写算法实现从头到尾输出每个结点的值.方法1: 链表逆置后再输出.方法2:递归实现逆向输出void R_Print(LinkList L){ if(L->next!=NULL) R_Print(L->next); print(L->data);}...原创 2018-04-05 20:27:29 · 1094 阅读 · 0 评论 -
PAT乙级1012.数字分类
数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和; A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…; A3...原创 2018-04-18 23:04:35 · 190 阅读 · 0 评论 -
PAT-B 1014 福尔摩斯的约会 (20 分)
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代...原创 2019-02-01 12:33:12 · 188 阅读 · 0 评论 -
PAT-B 1015 德才论 (25 分)
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入格式:输入第一行给出 3 个正整数,分别为:N(≤105),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生...原创 2019-02-11 12:30:49 · 261 阅读 · 0 评论 -
携程后台开发笔试第二题
第二题题目是按k组反转链表,但是他没给链表结构,所以不用像leetcode那题一样,直接用数组存储处理就可以了输入:[1,2,3,4,5]2输出:[2,1,4,3,5] //不够K的倍数的数字5维持原状用Java比C++好做定义一个字符串转换为按 , 数组分割的数组的函数/*Javapublic static String [] strTostrArray(String st...原创 2019-04-08 23:09:04 · 444 阅读 · 0 评论 -
[笔试题]统计一个文本文件中每个单词出现的次数,并把结果写入文件中
```#include<iostream>#include<fstream>#include<string>#include<map>using namespace std;int main(int argc, char *argv[]){ ifstream in("in.txt"); ofstream out("out.txt...原创 2019-04-12 10:45:33 · 7231 阅读 · 0 评论 -
[纽劢科技笔试题]-简单模拟
题意:输入n表示有1-n这些数,当剩余两个数及以上时,输出第一个并丢弃,并把第二个添加到末尾,循环往复```输入:2 //表示两组数据2 //表示第一组数据有1 27 //表示第二组数据有 1 2 3 4 5 6 7输出:1 21 3 5 7 4 2 6```---------------------------...原创 2019-04-12 16:23:35 · 1472 阅读 · 0 评论 -
二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:每次循环统计二进制中最后一个1,再把这个1去掉num&(num-1)这个操作,可以 ,每次都把当前统计的1去掉,直到原数字变成0#include<iostream>using namespace std; class Solution {public: &n...原创 2019-05-18 13:01:39 · 259 阅读 · 0 评论 -
栈的应用--括号匹配的检验
#include <stdio.h>#include <string.h>int top=-1;//top变量时刻表示栈顶元素所在位置void push(char * a,int elem){ a[++top]=elem;}void pop(char* a){ if (top==-1) { return ; } top--;}char v原创 2017-10-01 15:48:15 · 374 阅读 · 0 评论 -
稀疏矩阵的压缩存储
实验目的:深入研究数组的存储表示和实现技术,着重掌握对稀疏矩阵的表示方法及其运算的实现。问题描述:稀疏矩阵是指那些多数元素为零的矩阵。利用‘稀疏’特点进行存储和计算可以大大节省存储 空间,提高效率。通过对稀疏矩阵的存储表示,实现矩阵的基本操作。实验要求: 1.要求矩阵的输入形式采用三元组表示,以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵。 2.设计矩阵的逆置算法,实现矩阵的逆置。 3原创 2017-06-03 23:48:53 · 1548 阅读 · 1 评论 -
线性表的顺序表示及其基本操作
#include<stdio.h>#include<stdlib.h> #define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OVERFLOW 1#define OK 1#define ERROR 0/*基本操作*/Status Initlist_Sq(Sqlist &L);Status Creat_Sq(Sqlist原创 2017-08-11 19:23:47 · 409 阅读 · 0 评论 -
单链表的基本操作
#include<stdio.h>#include<stdlib.h> #define OVERFLOW 1#define OK 1#define ERROR 0#define LEN sizeof(struct LNode)typedef int ElemType;typedef int Status;typedef struct LNode{ ElemType da原创 2017-08-11 21:20:38 · 322 阅读 · 0 评论 -
数据结构与算法分析--1.1 解决选择问题
编写一个程序解决选择问题,令K=N/2,找到N个数中的第K个最大者#include<iostream>#include<stdlib.h>const int MAX=100;using namespace std;int compare(const void *a,const void *b){ return *(int*)b-*(int*)a;//由大到小排列 ;return *原创 2017-08-04 19:06:27 · 373 阅读 · 0 评论 -
欧几里得算法--计算最大公因数
两个整数的最大公因数(Gcd)是同时取整除的最大整数.#include<stdio.h>unsigned int Gcd(unsigned int M,unsigned int N);int main(){ unsigned int M=0,N=0; scanf("%d%d",&M,&N); printf("%d\n",Gcd(M,N)); return 0;原创 2017-08-07 18:17:42 · 894 阅读 · 0 评论 -
高效率的求幂运算
计算X^N的常见算法是使用N-1次乘法自乘,但是递归算法更好,如果N是偶数, 我们有X^N=X^(N/2)X^(N/2),如果N是奇数则X^N=[X^(N-1)/2][X^(N-1)/2].#include<stdio.h>int IsEven(unsigned N);long int Pow(long int X,unsigned int N);int main(){ long原创 2017-08-10 21:27:05 · 349 阅读 · 0 评论 -
查找树ADT--二叉查找树
/*Tree.h*/#ifndef _Tree_Hstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef int ElementType;SearchTree MakeEmpty(SearchTree T);Position Find(ElementType原创 2017-08-21 17:08:32 · 279 阅读 · 0 评论 -
数据结构与算法分析--最大子序列和问题
最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。我们一起用多种方式,逐步优化解决这个问题。 例: 输入{ -2, 11, -4, 13, -5, -2 }时,答案为 20 (从A2到 A4). 算法1:#include <stdio.h>//N是数组长度,A是待计算的数...原创 2017-08-07 15:47:35 · 2104 阅读 · 0 评论 -
栈的基本操作及应用
/*栈的基本操作及实现表达式求值*/#include<stdio.h>#include<stdlib.h>#include<windows.h> #define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量#define OK 1#define OVERFLOW 0#define ERROR 0原创 2017-08-15 17:18:14 · 998 阅读 · 0 评论 -
数据结构与算法——不相交集类的C++实现
https://www.2cto.com/kf/201604/503015.html转载 2017-09-07 21:51:43 · 526 阅读 · 0 评论 -
【转】并查集算法和路径压缩
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?) 来看一个实例,杭电1232畅通工程:畅通工程Problem Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全转载 2017-09-08 17:24:50 · 612 阅读 · 0 评论 -
循环链表--约瑟夫环问题
约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人。例如有 5 个人,要求从编号为 3 的人开始,数到 2 的那个人出列: 出列顺序依次为:编号为 3 的人开始数 1原创 2017-08-18 17:55:22 · 716 阅读 · 0 评论