自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 问答 (6)
  • 收藏
  • 关注

原创 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。输入:nums = [5,7,7,8,8,10], target = 8。输入:nums = [5,7,7,8,8,10], target = 6。如果数组中不存在目标值 target,返回 [-1, -1]。输入:nums = [], target = 0。进阶:你可以设计并实现时间复杂度为。的算法解决此问题吗?输出:[-1,-1]输出:[-1,-1]

2024-03-05 16:43:10 228 1

原创 力扣刷题---数组---二分法

Tip3:在比对完mid值不符合的时候,变换right和left的时候需可以+1或者-1避免重复对比。Tip4:注意边界问题,左闭右开和左闭右闭在等于号和加一减一问题上不一样。Tip1:避免数组溢出,采用减法代替加法。Tip2:循环条件加等号!

2023-09-21 16:41:48 92

原创 CSP 序列查询新解

题目代码#include<bits/stdc++.h>using namespace std;int n,N;int A[100010]={0};long long erro=0;int r; int main() { scanf("%d%d",&n,&N); for(int i=1;i<=n;i++) { scanf("%d",&A[i]); } n++; A[n++]=N; r=floor(N/(n-1)); int l

2022-04-24 20:45:50 885

原创 《算法笔记》 第十一章 提高篇(5)--- 动态规划专题

一个问题必须拥有重叠子问题和最优子结构才能使用动态规划解决。分治法的子问题没有重叠,但动态规划解决的问题拥有重叠的子问题;分治法不一定解决的是最优化问题,而动态规划一定解决的是最优化问题。贪心算法只是按照一定的策略选择了一个解并得出该解作为整个问题的解,但是动态规划要选择最优的策略,然后作为整个问题的解。最大连续子序列和只需要右端点的枚举状态转移方程:dp[i]=max(A[i],dp[i-1]+A[i])代码:#include <iostream>#include <c

2022-03-28 20:58:14 806

原创 《算法笔记》 第十三章 专题扩展

分块思想序列元素第K大问题

2022-03-28 15:14:19 395

原创 《算法笔记》 第十二章 提高篇(6)--- 字符串专题

字符串hash进阶对于一个字符串,可以用一个数值来表示(下面输入字符串中只含有小写字母,若还有其他的字符,注意改变式子)const int MOD=1000000007;const int P=10000019;long long hashFunc(string S){ long long id=0; for(int i=0;i<S.length();i++) { id=(id*P+S[i]-'a')%MOD; } return id;}通用公式为:H[i]=(H[I-

2022-03-27 21:12:30 621

原创 《算法笔记》 第十章 提高篇(4)--- 图算法专题

图的存储:①邻接矩阵用一个二维数组来存放,不适合存放过多顶点(一般不超过1000)②邻接表可以用vector来存放邻接表vector Adj[N];以结构体存储节点struct Node{ int v,w; Node(int _v,int _w): v(_v),w(_w) { }//h构造函数 };Adj[1].push_back(Node(3,4));图的访问:DFS+邻接矩阵#include <iostream>#include <cstdio&gt

2022-03-27 18:28:45 362

原创 《算法笔记》 第九章 提高篇(3)---数据结构专题(2)

对于二叉树的层次遍历#include <iostream>#include <cstdio>#include <queue>using namespace std;typedef struct node{ char data; node* lchild; node* rchild;}node;void BFS(node* n1){ queue<node*> q; if(n1!=NULL) { q.push(n1); }

2022-03-26 17:58:07 1280

原创 《算法笔记》 第八章 提高篇---搜索专题

深度优先算法DFS代码模板void DFS(需要记录的一些数值){if(达到临界值){//判断是否为最优并记录最优解return;}//一号分支(加入剪枝判断)DFS(选择一号分支各个参数相应的变化);//二号分支(加入剪枝判断)DFS(选择二号分支各个参数相应的变化);…}广度优先搜索BFS代码模板void BFS(int s){queue q;q.push(s);while(!q){取出队首元素top;访问队首元素top;将队首元素出队;将top的

2022-03-25 21:29:32 499

原创 《算法笔记》 第六章 C++标准模板库(STL)介绍

一、vector注意点:v.begin()+2可以看作v[2]常用函数:push_back()pop_back()size()clear()insert(iterator it,x)//在迭代器it处插入一个元素xerase(iterator it)//删除it位置的元素erase(v.begin+1,v.begin+4)//删除v[1],v[2],v[3](左闭右开)二、set/multiset注意点:内部自动有序且不含重复元素可以重载排列规则常用函数:insert()f

2022-03-24 23:43:08 1104

原创 《算法笔记上级训练实战指南》 第四章 入门篇(2)--算法初步

二分完美数列关于lower_bound和upper_bound的第二种用法int t=lower_bound(a,a+n,k)-a 返回第一个大于等于k的下标,如果k比数组里面所有的数都大,就返回a+n,如果k比所有数都小,返回第一个元素下标int t=upper_bound(a,a+n,k)-a 返回第一个大于k的下标,如果k比数组所有元素都大,就返回a+n,如果k比所有数都小,返回第一个元素下标(摘自https://www.cnblogs.com/caijiaming/p/9316716

2022-03-23 22:29:47 109

原创 《算法笔记》 第四章 入门篇(2)--算法初步

一、排序①插入排序#define maxn 10000int A[maxn],n;void insertSort(){ for(int i=2;i<=n;i++) { int temp=A[i],j=i; while(j>1&&temp<A[j-1]) { A[j]=A[j-1]; j--; } A[j]=temp; }}②利用sort排序,注意sort的重写的排序规则头文件#includesort(起始位置地址,结

2022-03-23 22:29:35 344

原创 《算法笔记》 第三章 入门篇(1)--入门模拟

1.int类型的数据范围是[-231 ~231-1],注意数据类型的范围,超出需要改为longlong类型//2.将P进制的数x转化为十进制的数yvoid PtoT(){ int y=0,product=1; while(x!=0) { y=y+(x%10)*product; x=x/10; product=product*P; } } //3.将十进制的数y转化成Q进制的数zvoid TtoQ(){ int z[40],num=0; do{ z[num++]=y

2022-03-22 22:44:54 105

原创 《算法笔记上级训练实战指南》 第五章 入门篇(3)--数学问题

B1049/A1104 数组的片段和(P195)自己的解法:#include <iostream>#include <stdio.h>using namespace std;int N=0;double num,total=0.0;double use[100002]={0.0};int main(){ cin>>N; for(int i=1;i<=N;i++) { cin>>num; if(i==1) { u

2022-03-20 19:46:44 99

原创 《算法笔记》 第五章 入门篇(3)--数学问题

最大公约数–欧几里得算法 gcd(a,b)=gcd(b,a%b)int gcd(int a,int b){ if(b==0) { return a; } else { return gcd(b,a%b); }} 最小公倍数int lcm(int a,int b){ int d=gcd(a,b); return a/d*b;}分数的定义与化简struct Fraction{ int up,down;}; //化简分数Fraction reduction(F

2022-03-19 20:29:26 316

原创 2021-10-17

学习《挑战程序设计竞赛》2.2贪心算法硬币问题有1元、5元、10元、50元、100元、500元的硬币各C1 C5 C10 C50 C100 C500 。现在要用这些硬币来支付A元,最少需要多少枚硬币?#include<iostream>using namespace std;const int v[6]={1,5,10,50,100,500};int C[6];int A;void solve(){ int ans=0; for(int i=5;i&

2021-10-17 14:29:25 98

原创 2021-10-17

学习《挑战程序设计竞赛》2.1 最基础穷竭搜索基础:递归函数、栈、队列深度优先搜索:部分和问题给定整数a1、a2、…an,判断是否可以从中选出若干数,使它们的和恰好为K。#include<iostream>#define MAX 100000using namespace std;int a[MAX]={0};int n=0,k=0;bool dfs(int i,int sum){ if(i==n) { return sum==k; } if(dfs(i+1

2021-10-17 11:34:27 78

原创 P9

一、插入排序1.直接插入排序最好完成n-1次比较,0次元素移动最差需要n(n-1)/2次移动,(n-1)(n+4)/2次移动时间复杂度最好为O(n),最坏为O(n^2),需要一个元素的辅助空间2.折半插入排序法减少关键字的比较次数,但时间复杂度不变,没有减少移动次数,需要一个元素的辅助空间3.二路插入排序法关键字比较次数和移动次数均减小一半左右,但时间复杂度不变,辅助空间需要n个在任何情况下折半插入排序和直接插入排序移动的元素个数一样多4.希尔排序时间复杂度低于直接插入排序折半插入排

2021-01-02 14:07:30 254

原创 P8

1.二叉排序树的查找效率取决于树的形态2.在含有n个结点的平衡二叉排序树中,查找失败时最多花费代价为O(logn)3.分块查找时,共有n个元素,每块元素数量为根号n最佳。4.有n个元素的有序表,折半查找比较成功最多次数就是算100能被2除多少次后小于1(例:100个元素为7)5.不适合在链式存储结构上实现的查找方法是折半查找 查找第九题有问题在构造二叉排序树时,若关键字序列有序,则二叉排序树的高度最大...

2020-12-29 21:45:02 966 1

原创 P7

1.在Floyd算法中,考虑不同顶点时,都有可能改变任意点的路径例:有一个顶点编号为0~4的带权有向图G,现用Floyd算法求任意两个顶点之间的最短路径,在算法执行的某时刻已考虑了0~2的顶点,现考虑顶点3,则以下叙述中正确的是____。A 只可能修改从顶点0~2到顶点3的最短路径B 只可能修改从顶点3到顶点0~2的最短路径C 只可能修改从顶点0~2到顶点4的最短路径D 所有两个顶点之间的路径都可能被修改2.构成连通图必须要满足:边数等于顶点数简易3.无向连通图的所有顶点度数之和为偶数4.如

2020-12-27 21:39:26 1229 2

原创 P6

1.如果在树的孩子兄弟链存结构中有6个空的左指域,7个空的右指针域,5个结点左右指针域都为空,则该树中叶子结点的个数为6个解:因为孩子兄弟存储遵循左孩子右兄弟,6个无左指针域说明6个节点无孩子。2.n次树中总结点数:N=n0+n1+n2+n3+…+nn;总分支树:B=1n1+2n2+3n3+…+nnnN=B+13.设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有多少个右指针域为空个数 = 总的空指针域个数 - 左指针域为空的个数题目非终端结点为n,那

2020-12-27 18:11:46 1601

原创 P3,4,5

1.串是一种特殊的线性表2.一个长度为n串的子串个数为:n(n+1)/2+13.一个长度为n串的平凡互异子串为 n(n+1)/2-14.链串的存储密度为一个链串的结点类型如下typedef struct node{char data[MaxSize];Struct node *next;}SLinkNode;如果每个字符占一个字节,结点大小为6,指针占两个字节,该链串的存储密度为0.755.环形队列:队满的标志是qu->front==(qu->rear+1)%MaxSiz

2020-12-27 16:06:10 2273

原创 P2

1.在只有尾结点指针rear,没有头结点的非空循环单链表中,删除开始结点的时间复杂度为O(1)因为循环单链表尾节点next指向头节点2.在一个长度为n的顺序表中向第i(1≤i≤n+1)个元素之前插入一个新元素时需要向后移动n-i+1个元素.3.在有n个元素的顺序表中删除任意一个元素所需移动元素的平均次数为 (n-1)/24.在有n个元素的顺序表中的任意位置插入一个元素所需移动元素的平均次数为 n/25.链式存储结构也包括静态结构,比如静态链表。...

2020-12-27 13:17:03 618

原创 P1

1.数据项是最小的可标识单位。2.数据元素是数据的基本单位。3.数据由若干个数据元素组成。4.算法分析的主要任务之一是分析 算法的执行时间和问题规模之间的关系5.某算法的时间复杂度为O(n2),表明该算法的执行时间与 n2 成正比(执行时间与n2呈现线性增长关系)6.链式存储结构通过链指针表示数据元素之间的关系7.数据采用链式存储结构时要求每个结点占用一片连续的存储区域8.数据的逻辑结构是数据元素之间逻辑关系的整体9.在数据结构中从逻辑上可以把数据结构分为线性结构和非线性结构两类。10.算

2020-12-27 10:14:23 164

原创 概念

1)长度为n的字符串,如果串中字符各不相同,则字串的个数为n(n+1)/2+12)设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异非平凡子串(非空且不同于S本身)的个数为:n(n+1)/2-13)最不适合用作链队的链表只带队首指针的非循环双链表4)最适合用作链队的链表是带队首指针和队尾指针的非循环单链表...

2020-11-01 16:00:07 452

原创 栈的基础概念

栈基础概念:先进后出,用数组方式实现,基本操作有:出栈,入栈,找栈顶,判断栈是否为空,打印一个栈typedef struct{ int data[MAXSIZE]; int top;}SqStack;PS:这个创建栈的缺点在于栈的内存无法改变,MAXSIZE过大造成内存浪费,过小栈存储太少课本建立栈的方式是:typedef struct{ int* base; int* top;}SqStack;定义了栈底和栈顶指针,好处在于可以随时手动开辟一片空间。还可以用链栈来实现t

2020-10-28 12:38:43 127

原创 错误---Run-Time Check Failure #3

int ifornot(int input[], int output[],int length){ Stack s; Init(s); int a =0, e, b = 0; if (!same(input, output, length)) return 0; for (int i = 0; i < length; i++) { if (i == 0) { b = Get(input, output[i], length); for (int j = 0; j

2020-10-28 11:11:52 4851

原创 作业题--关于栈队串

1.最不适合用作链队的链表(A)A 只带队首指针的非循环双链表B 只带队首指针的循环双链表C 只带队尾指针的循环双链表D 只带队尾指针的循环单链表解析:A选项查找队尾时间复杂度最长O(n),其他都只需要O(1)类似题:最适合用作链队的链表是(B)A 带队首指针和队尾指针的循环单链表B 带队首指针和队尾指针的非循环单链表C 只带队首指针的非循环单链表D 只带队首指针的循环单链表2.设环形队列中数组的下标为0~N-1,其队头、队尾指针分别为front和rear(front指向队列中队头元

2020-10-25 17:15:45 4500

原创 力扣简单题---两数之和

class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { for(int i=0;i<nums.size();i++) { for(int j=i+1;j<nums.size();j++) { if(nums[i]+nums[j]==target)

2020-10-24 21:27:30 101

空空如也

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

TA关注的人

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