自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 凸多边形最优三角剖分

一.问题描述【问题描述】使用动态规划算法解凸多边形最优三角剖分问题,具体来说就是,依据递归式,按照顺序求得子问题,使得该三角剖分中诸三角形上权之和为最小。【输入形式】在屏幕上输入凸多边形顶点个数和顶点坐标。【输出形式】最优三角剖分后的三角形顶点。【样例1输入】78 260 200 1010 022 1227 2115 26【样例2输出】012234024456046二.思路三.代码#include<bits/stdc++.h>using namespa

2021-05-24 19:08:59 384

原创 最大子段和

一.问题描述【问题描述】解最大子段和问题,具体来说就是,依据递归式,按照顺序求得子问题。【输入形式】在屏幕上输入一个序列元素,包含负整数、0和正整数。【输出形式】序列的最大子段和,及得到最大子段和时的起始和终止编号。【样例输入】-2 11 -4 13 -5 -2【样例输出】2024二.算法思路三.代码动态规划法:#include<bits/stdc++.h>using namespace std;int x=1,y=1;int DYNAMIC_MAX_SUB_SU

2021-05-24 19:05:05 182

原创 LeetCode-96.不同的二叉搜索树

一.题目描述给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。输入:n = 3输出:5二.思路①用1…n这n个数构建二叉搜索树,遍历这n个数,令i(1<=i<=n)作为二叉树的根节点,那么用1…i-1构建其左子树,用i+1…n构建其右子树,这样就分解成两个子问题。②当序列长度一定时,不管序列中值的范围是什么,该序列能构建不同的二叉搜索树数量相同。③设G[n]表示长度为n的序列能构建不同二叉搜索树的数量

2021-05-19 21:05:38 172

原创 最短路径

一.问题描述【问题描述】假设一个矩阵mat的大小为M行N列,矩阵每个位置上有大于或等于0的整数,现从左上角[1, 1]开始,每次只能向下或向右走一步,最后到达右下角[M, N],路径上的数字累加就是路径和。现要求最短路径和以及最短的路径。【输入形式】在屏幕上输入矩阵大小,以及矩阵每个元素的值。【输出形式】最短路径和,以及最短路径。【样例1输入】4 41 3 5 98 1 3 45 0 6 18 8 4 0【样例1输出】121 11 22 23 23 33 44 4二.算

2021-05-18 21:46:53 345

原创 最长公共子序列

一.问题描述求序列Xi = {x1, …, xi}和序列Yj = {y1, …, yj}的最长公共子序列的长度并输出。当最长公共子序列为空时,输出最长公共子序列长度为0,最长公共子序列为:None。定义:一个数列S,如果分别是另个或多个已知数列的子序列,且是所有匹配此条件中最长的,则称S是已知数列的最长公共子序列;注意:子序列不需要在原序列中占用连续的位置。【样例1输入】A B C B D A BB D C A B A【样例1输出】4BCBA二.算法思路三.代码#include&lt

2021-05-18 21:43:26 102

原创 LeetCode-5.最长回文子串

一.题目描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”二.思路一个回文子串的长度大于2时,去掉第一个字母与最后一个字母之后还是回文子串。建立状态数组dp[i][j],表示当起始位置为i,终止位置为j时,子串是否为回文子串。由此,得到状态转移

2021-05-18 20:36:50 128 1

原创 LeetCode-63.不同路径Ⅱ

一.题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2二.思路首先考虑第一行和第一列,第一行中的某位置,只能由其左边的位置移动过来,第一列只能由其上面的位置移动过来,而且第一行或

2021-05-18 17:33:02 94

原创 矩阵连乘(动态规划)

一.题目描述【问题描述】使用动态规划算法解矩阵连乘问题,具体来说就是,依据其递归式自底向上的方式进行计算,在计算过程中,保存已子问题答案,每个子问题只解决一次,在后面计算需要时只要简单查一下得到其结果,从而避免大量的重复计算,最终得到多项式时间的算法。【输入形式】在屏幕上输入第1个矩阵的行数和第1个矩阵到第n个矩阵的列数,各数间都以一个空格分隔。【输出形式】矩阵连乘A1…An的最少数乘次数和最优计算次序。【样例1输入】30 35 15 5 10 20 25【样例1输出】15125((A1(A

2021-05-17 21:45:32 549 1

原创 0-1背包问题

一.问题描述【问题描述】使用动态规划算法解0-1背包问题,使得选择合适物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。【输入形式】在屏幕上输入背包容量、物品数量、每件物品价值和重量。【输出形式】最优解时所选物品的价值总和及其编号。【样例输入】1056 3 5 4 62 2 6 5 4【样例输出】151 2 5二.算法思路dp数组m[i][j]表示背包容量为j,可选择物品为i,i+1…,n时背包问题的最优值。对于每一件物品i来讲,如果当前背包容量大于等于该件物品重量

2021-05-16 16:00:16 174

原创 线性时间选择(递归)

一.题目描述【问题描述】每次都是优化选出一个元素(分组后的中位数)为划分基准,在线性时间内寻找第i小元素。提示:分组时的组的个数为n/5的向下取整;分组后的中位数取第(num_group/2向上取整)小的元素。【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。再输入要寻找的元素是数组从小到大顺序中第几个位置。【输出形式】输出第一次划分找到的基准元素以及数组从小到大顺序中要寻找的那个位置的元素。【样例输入】2 9 8 0 7 10 1 12 3 14 5 13 6 11 43【样例输出】

2021-04-13 15:11:05 434

原创 快速排序(递归)

一.问题描述【问题描述】每次划分时都以最后一个元素为划分基准,使用快速排序算法对若干整数进行排序。【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。【输出形式】输出从小到大的排序结果。【样例输入】48 38 65 97 76 13 27【样例输出】913 27 38 48 65 76 97二.算法思路算法描述:1.以数组中某一个元素为基准,将数组划分为三段并满足arr[p…q-1]≤arr[q] ≤arr[q+1…r]。2.再递归调用快速排序函数(QUICKSORT)分别对a

2021-03-27 09:38:23 1211

原创 递归合并排序

一.题目描述【问题描述】使用递归合并排序算法对若干整数进行排序【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。【输出形式】输出最终从小到大排序好的结果。【样例输入】48 38 65 97 76 13 27【样例输出】13 27 38 48 65 76 97二.算法思路基本思想:将给定n个元素的待排序的数组分成各含n/2个元素的数组,再递归调用合并排序函数对两个子数组进行排序,最后逐个合并成为原来的数组。细节部分:在mergr()函数中,创建两个子数组Left和Right,分别

2021-03-20 19:58:50 839 1

原创 c++连续读取若干整数的几种方法

第一种:vector<int>vec; int tmp; cin>>tmp; vec.push_back(tmp); while(cin.get()!='\n'){ cin>>tmp; vec.push_back(tmp); }第二种: int arr[10],i; while(cin>>arr[i++]){ if(cin.get()=='\n') break; }第三种: int arr[100]; int

2021-03-17 15:58:56 3108

原创 全排列问题

【问题描述】对n个整数进行全排列【输入形式】在屏幕上输入若干个整数,各数间都以一个空格分隔。【输出形式】按照顺序每行输出一种排列方式【样例输入】1 2 3【样例输出】1 2 31 3 22 1 32 3 13 2 13 1 2代码如下:#include<bits/stdc++.h>using namespace std;void Perm(vector<int>vec,int k,int m){ if(k==m){ for(int i=0;i&lt

2021-03-13 16:43:20 649

原创 二分搜索

【问题描述】使用二分搜索方法,在有序数组中寻找特定的元素【输入形式】在屏幕上输入若干个从小到大排列的互不相同的整数,各数间都以一个空格分隔。再输入要寻找的元素key,其中min<key<max,min和max分别为这些整数的最小值和最大值。【输出形式】输出每次搜索的所在范围内的整数。若有序数组中存在该特定元素,则输出该元素在数组中的位置;若不存在,则输出0。【样例1输入】15 17 18 22 35 51 60 88 90 10018【样例1输出】15 17 18 22 35 51

2021-03-09 23:43:34 354

原创 [数据结构]多维数组

#include <stdio.h>#include <stdlib.h>#include <stdarg.h> //标准头文件,提供宏va_start、va_arg和va_end用于存取变长参数表#define MAX_ARRAY_DIM 8 //假设数组维数最大值为8typedef struct{ int *base; //数组元素基址 int dim; //数组维数 int *bound; //数组维界基址,即用于存储每一

2020-11-12 16:16:41 328

原创 [数据结构]栈

#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;//typedef int ElementType;struct Node;typedef struct Node *PtrToNode;typedef PtrToNode Stack;int IsEmpty(Stack S);//判断栈是否为空 Stack CreateStack();//创建一个空栈 vo

2020-11-05 16:37:16 99

原创 表达式求值(栈)

#include<bits/stdc++.h>using namespace std;stack<char>OPTR;//运算符栈 stack<double>OPND;//操作数栈 int GetIndex(char oper){ //获取运算符oper在运算符优先级表中的索引 int index; switch(oper){ case'+': index=0; break; case'-': index=1; break;

2020-11-05 16:34:38 463

原创 [数据结构]串

typedef struct{ char *ch; int length;}HString; void InitStr(HString &T){ T.ch=NULL; T.length=0;}int StrAssign(HString &T,char *chars){ //生成一个值等于串常量chars的串T if(T.ch) free(T.ch);//释放T中原有的串的空间 int cnt;//记录串常量的长度 char *c; for(cnt=0,c=c

2020-11-05 16:27:40 173

原创 [数据结构]单链表

struct Node { ElementType Element; Node* Next;};typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;List CreatList();//创建一个单链表 int IsEmpty(List L);//测试链表是否是空表int IsLast(Position P,List L);//测试当前位置是否为链表末尾的函数int Find(E

2020-10-22 15:41:44 242

原创 后缀表达式

题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。输入格式输入:后缀表达式输出格式输出:表达式的值代码如下:#include<bits/stdc++.h>using namespace std;char c[5];int main().

2020-10-18 14:45:56 450

原创 求二叉树先序序列

题目描述:给出一棵二叉树的中序与后序排列。求出它的先序排列。输入格式:2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。输出格式:1行,表示一棵二叉树的先序排列。思路:后序序列的最后一个元素为树的根节点在后序序列中找到根节点并且输出 -> 在中序序列中找到根节点位置(即找到左右子树)-> 再分别将左子树和右子树当做新树递归。#include<iostream>#include<string>using namespace std;s.

2020-10-18 11:46:46 1135

原创 [数据结构]顺序表

动态顺序表://动态顺序表 #include<stdio.h>#include<stdlib.h>#define LIST_SIZE 100 //顺序表存储空间的初始分配量typedef int ElementType; typedef struct SqList* List;struct SqList{ ElementType* elem;//存储空间的基址 int length;//顺序表的当前长度 int capacity;//当前为顺序表分配的存储容

2020-10-17 12:19:54 276

原创 [数据结构]二叉树

输出二叉树的叶子结点void PreOrderTraversal(BinTree root){ if(root){ if(!root->Left&&!root->Right)//如果该结点左右子树为空 cout<<root->Data;//那么输出的结点就是叶子结点 PreOrderTraversal(root->Left); PreOrderTraversal(root.

2020-10-13 19:00:04 88

原创 c++容器基本操作

1. vectorvector<int>v;v.push_back(x)在v的最后插入值xv.pop_back()删除v中最后一个元素v.size()返回v中的元素个数v.front()返回v的第一个元素v.back()返回v的最后一个元素v[i]返回v中秩为i的元素v.clear()情况v中元素v.empty()判断v是否为空,若为空返回true,否则返回false2.stcak3.queue...

2020-09-29 20:32:44 249

原创 Vector模板类

typedef int Rank;#define DEFAULT_CAPACITY 3//默认的初始容量template<typename T>class Vector{protected: Rank _size;//规模 int _capacity;//容量 T *_elem;//数据区 void copyFrom(T const *A,Rank lo,Rank hi); void expand();//空间不足时扩容public: /

2020-09-29 20:09:16 639

原创 冒泡排序

分析:冒泡排序对于长度为为n的序列,共需要做n-1次比较和不超过n-1次交换,时间复杂度为O(n²)void BubbleSort(int a[],int n){ bool Sorted=false;//整体排序标志,先假设尚未排序 while(!Sorted){ Sorted=true;//假设已经完成排序 for(int i=1;i<n;i++){ if(a[i-1]>a[i]){ sw

2020-09-29 18:38:11 112

原创 KMP算法

KPM算法简介:A B C A B C D J B N K (文本串)A B C A B B (模式串)例如这个文本串与模式串,前5个元素都匹配,直到第六个元素不匹配,按照暴力算法,应该将模式串向后移动一个单位,在依次比较,而KMP算法的做法是:A B C A B C D J B N K   A B C A B BKPM算法分析:当文本串与模式串比对的时候,如果在某个位置比对终止,此时有 T[i]!=P[j] ,那么要设法保持文本串指针不回溯,只移动模式串的指针,现在关键就是计算模式串移动几个

2020-09-24 21:47:24 127

原创 leetcode-包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 .

2020-09-23 21:17:35 122

原创 leetcode-合并两个有序链表

题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4方法一:(迭代)算法思路:创建一个新节点PreNode,用于返回合并后的链表,创建一个指针Prev先指向PreNode,然后通过调整其next指针来进行迭代,比较l1与l2节点中那个值更小,更小的一个赋给Prev->next,然后l1(或者l2)与P.

2020-09-22 20:53:16 102

原创 二叉树的遍历

概念先访问根节点,再前序遍历左子树,然后前序遍历右子树。中序遍历:先中序遍历左子树,再访问根节点,再中序遍历右子树。后序遍历:先后续遍历左子树,在后序遍历右子树,在访问根节点。/**二叉树定义 * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), lef

2020-09-15 20:18:03 211

原创 [数据结构]二叉搜索树

二叉查找树性质:对于数中的每个节点X,其左子树中所有关键字值小于X关键字值,而其右子树所有关键字值大于X的关键字值二叉查找树的创建,查找,插入,删除:struct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;SearchTree MakeEmpty(SearchTree Tree);Position Find(ElementType X,SearchTree Tree);Po.

2020-09-13 17:17:10 134

原创 leetcode-反转链表

题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000方法一:双指针/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNod.

2020-09-13 11:48:35 142

原创 leetcode-两两交换链表中的节点

题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3./** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(.

2020-09-12 21:43:36 76

原创 leetcode-有效的括号(stack)

题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true解题思路遍.

2020-09-12 21:00:10 456

原创 常对象,常成员函数,常引用

常对象声明显示:const 类型说明符 对象名; 常对象的数据成员值在对象的整个生存期间不能被改变,即就是,常对象必须进行初始化,而且不能被更新。常成员函数声明形式:类型说明符 函数名(参数表)const;注意:1.在函数定义部分也需要带const关键字。2.一个常对象只能调用它的常成员函数,是常对象唯一的对外接口方式。3.常成员函数不能更新目的对象的数据成员,因此对于无须改变对象状态的成员函数,最好使用const关键字。常数据成员声明形式:const 类型说明符 变量名; 常数

2020-05-26 20:16:40 573

原创 c++——友元函数与友元类

一.概述友元关系提供了不同对类或对象的成员函数,类的成员函数与一般函数之间之间进行的数据共享机制。通过友元关系,一个普通函数或者类的成员函数可以访问封装于另外一个类中的数据。利用关键字friend来声明友元关系。二.类的友元函数 友元函数是在类中用关键字friend声明的非成员函数,友元函数可以是一个普通的函数也可以是其他类的成员函数。友元函数是一般函数:friend 类型名 函数名(参数表);友元函数是另一个类的成员函数:friend 类型名 另一个类名::函数名(参数表);计算两点间

2020-05-26 17:49:44 217

原创 运行时间测试

一.概述测试程序指定部分跑了多长时间用 **clock()**函数作用:捕捉从程序开始运行到clock()被调用所消耗的时间,单位是clock tick,表示“时钟打点”。常数CLK_TCK表示机器时钟每秒所走的时钟打点数。头文件:<time.h>二.测试代码#include<stdio.h>#include<time.h>//注意添加clock()函数的头文件clock_t start,stop;//为clock()函数返回值类型double durat

2020-05-23 17:42:03 1829

原创 c++——复制构造函数

一.概述复制构造函数作用:使用一个已经存在的对象去初始化同类的一个新对象,其形参是本类对象的引用。如果没有定义复制构造函数,编译器会在必要时自动生成一个隐含的复制构造函数。声明和实现复制构造函数:class 类名{public: 类名(形参表);//构造函数 类名(类名& 对象名);//复制构造函数private:};类名::类名(类名& 对象名){ 函数体}二.何时调用复制构造函数当用类的一个对象去初始化该类的另外一个对象说时point p1(1,2

2020-05-23 15:59:52 550

原创 c++——类的组合对内嵌对象的初始化

首先

2020-03-25 22:39:19 4494 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除