news 2026/4/16 22:38:21

算法期末复习1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法期末复习1

实验1:递归算法

折线分割

关键在于 f(n)=f(n-1)+4*(n-1)+1

#include<iostream> using namespace std; int main(){ int num=10000; int *arr=new int[10000]; arr[0]=0; arr[1]=2; for(int i=2;i<=10000;i++){ arr[i]=arr[i-1]+4*(i-1)+1; } int n; cin>>n; while(n>0){ n--; int x; cin>>x; cout<<arr[x]<<endl; } }

骨牌铺方格

f(n)=f(n-1)+f(n-2) 用c++时 需要注意 溢出 数组应该用 long long

#include<iostream> using namespace std; int main(){ int x; long long *arr=new long long[51]; arr[0]=0; arr[1]=1; arr[2]=2; for(int i=3;i<=50;i++){ arr[i]=arr[i-1]+arr[i-2]; } while(cin>>x){ cout<<arr[x]<<endl; } }

排队问题

f(n)=f(n-1)+f(n-2)+f(n-4) 操~蛋的是 用cpp会溢出 需要 模拟大数运算 建议直接py

#py注意事项 for i in range(1,10) i 到不到 10 #不要忘记写最后的if import sys def main(): arr=[1,1,2,4,7] for i in range (5,1200): arr.append(arr[i-1]+arr[i-2]+arr[i-4]) for line in sys.stdin: line = line.strip() if not line: continue x=int(line) print(arr[x]) if __name__ == "__main__": main()

排错问题

f(n)=(n-1)(f(n-1)+f(n-2)) 使用long long 数组

#include<iostream> using namespace std; int main(){ long long *arr=new long long[21]; arr[0]=0; arr[1]=0; arr[2]=1; arr[3]=2; for(int i=4;i<=20;i++){ arr[i]=(i-1)*(arr[i-1]+arr[i-2]); } int x; while(cin>>x){ cout<<arr[x]<<endl; } }

最大字段和问题

用双指针 left=right=0 right走 当sum<0 left=right+1

#include<iostream> using namespace std; int main(){ int n; cin>>n; int put=0; while(n>0){ n--; put++; int len; cin>>len; int *arr=new int[len]; for(int i=0;i<len;i++){ cin>>arr[i]; } int max=arr[0]; int sum=0; int left=0; int right=0; int resl=0; int resr=0; while(right<len && left<len){ sum+=arr[right]; if(sum>max){ max=sum; resl=left; resr=right; } if(sum<0){ sum=0; left=right+1; } right++; } cout<<"Case "<<put<<":"<<endl; cout<<max<<" "<<resl+1<<" "<<resr+1<<endl; } }

作业 渐进界+递归方程+排序

主定理

差距几何

桶排序 算出平均差距 (考虑到可能为0 手动+1 扩大桶大小 可能出现问题 但这道题可以通过😀)

然后分n-1个桶 每个桶维护 一段范围数据的最大值和最小值 最后 比较相邻非空桶最大最小值之差

int fun ( int arr[],int n ){ if(n<2) return 0; int max=arr[0]; int min=arr[0]; for(int i=0;i<n;i++){ if(arr[i]>max){ max=arr[i]; } if(arr[i]<min){ min=arr[i]; } } int aver=(max-min)/n+1; int *minArr=(int *)malloc(sizeof(int)*(n-1)); int *maxArr=(int *)malloc(sizeof(int)*(n-1)); for(int i=0;i<n-1;i++){ minArr[i]=-1; maxArr[i]=-1; } for(int i=0;i<n;i++){ int num=(arr[i]-min)/aver; if(arr[i]==max){ num=n-2; } if(minArr[num]==-1){ minArr[num]=arr[i]; }else if(minArr[num]>arr[i]){ minArr[num]=arr[i]; } if(maxArr[num]==-1){ maxArr[num]=arr[i]; }else if(maxArr[num]<arr[i]){ maxArr[num]=arr[i]; } } int res=0; int pArr=0; for(int i=0;i<n-1;i++){ if(minArr[i]!=-1){ pArr=i; break; } } for(int i=pArr+1;i<n-1;i++){ if(minArr[i]==-1){ continue; }else{ if(res<minArr[i]-maxArr[pArr]){ res=minArr[i]-maxArr[pArr]; } pArr=i; } } return res; }

n以内素数个数

直接假定n范围在1e8 可以通过

#include<iostream> const int MAX=1e8; using namespace std; int main(){ bool *arr=new bool[ MAX]; for(int i=0;i< MAX;i++){ arr[i]=true; } for(int i=2;i< MAX;i++){ if(arr[i]==true){ int j=i+i; while(j< MAX){ arr[j]=false; j+=i; } } } int res=0; int x; cin>>x; for(int i=2;i<=x;i++){ if(arr[i]==true) res++; } cout<<res; }

快速排序

#include<iostream> using namespace std; void swap(int &a,int &b); int pfunc(int*arr,int start,int end); void quickSort(int *arr,int start,int end,int n); int main(){ int n; while(cin>>n){ int *arr=new int[n]; for(int i=0;i<n;i++){ cin>>arr[i]; } quickSort(arr,0,n-1,n); } } void swap(int &a,int &b){ int t=a; a=b; b=t; } int pfunc(int*arr,int start,int end){ int left=start; int right=end; int hero=arr[start]; while(left<right){ while(left<right && arr[right]>=hero){ right--; } if(left<right){ arr[left]=arr[right]; left++; } while(left<right && arr[left]<=hero){ left++; } if(left<right){ arr[right]=arr[left]; right--; } } arr[left]=hero; return left; } void quickSort(int *arr,int start,int end,int n){ if(start>=end) return; int p=pfunc(arr,start,end); for(int i=0;i<n;i++){ cout<<arr[i]; if(i!=n-1){ cout<<" "; } } cout<<endl; quickSort(arr,start,p-1,n); quickSort(arr,p+1,end,n); }

二路归并排序

注意mergesort 和 merge中对数组的划分能匹配就行了

#include<iostream> using namespace std; void mergeSort(int *arr,int start,int end,int n); void merge(int* arr,int start,int end,int mid); int main(){ int n; while(cin>>n){ int *arr=new int[n]; for(int i=0;i<n;i++){ cin>>arr[i]; } mergeSort(arr,0,n-1,n); } } void mergeSort(int *arr,int start,int end,int n){ if(start==end) return ; int mid=(start+end)/2; mergeSort(arr,start,mid,n); mergeSort(arr,mid+1,end,n); merge(arr,start,end,mid); for(int i=0;i<n;i++){ cout<<arr[i]; if(i!=n-1){ cout<<" "; } } cout<<endl; } void merge(int* arr,int start,int end,int mid){ int* tempArr=new int[end-start+1]; int i=start; int j=mid+1; int k=0; while(i<=mid && j<=end){ if(arr[i]<arr[j]){ tempArr[k]=arr[i]; i++; }else{ tempArr[k]=arr[j]; j++; } k++; } while(i<=mid){ tempArr[k]=arr[i]; i++; k++; } while(j<=end){ tempArr[k]=arr[j]; j++; k++; } for(int n=0;n<end-start+1;n++){ arr[start+n]=tempArr[n]; } }

最大公约数

#include<iostream> using namespace std; int main() { long long a,b; cin>>a>>b; if (a>b) { long long t=a; a=b; b=t; } while (b%a!=0) { long long t=b; b=a; a=t%a; if (a==0) { cout<<0; return 0; } } cout<<a; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 14:42:50

Shopee 验证码解决方案

ight Data 的验证码解决方案是 抓取浏览器 和 网络解锁器 的内置功能&#xff0c;为应对最复杂的验证码挑战提供完整解决方案。功能特点快速识别与解决&#xff1a;可高准确率且迅速地自动解决 Shopee 验证码。IP 轮换&#xff1a;利用自动重试和动态 IP 调整&#xff0c;防止被…

作者头像 李华
网站建设 2026/4/8 19:13:11

Python - 诊断和修复内存泄漏

内存泄漏是指程序错误地管理内存分配&#xff0c;导致可用内存减少&#xff0c;并可能导致程序变慢或崩溃。 在 Python 中&#xff0c;内存管理通常由解释器处理&#xff0c;但内存泄漏仍然可能发生&#xff0c;尤其是在长时间运行的应用中。在 Python 中诊断和修复内存泄漏需…

作者头像 李华
网站建设 2026/4/13 7:22:27

什么叫组团社,什么叫地接社

在旅游行业中&#xff0c;有两个重要的角色&#xff1a;组团社与地接社&#xff0c;它们分别承担着不同的职责。 组团社&#xff0c;也被称为国内旅游批发商&#xff0c;其主要功能是接受旅游团或海外旅行社的预订。 它们负责制定并下达接待计划&#xff0c;甚至可以提供全程陪…

作者头像 李华
网站建设 2026/4/15 7:53:28

8大关键技术点掌握YashanDB的使用技巧

如何优化查询速度是数据库系统设计和运维中的重要问题&#xff0c;影响着业务响应时间和系统吞吐能力。高效的数据存储、合理的索引设计、智能的执行计划生成以及高并发事务控制技术&#xff0c;均直接关系到查询性能表现。本文围绕YashanDB数据库系统&#xff0c;深入剖析其八…

作者头像 李华
网站建设 2026/4/15 14:23:42

Kubernetes Service 架构深度解析:从虚拟IP到流量的智能寻址

在Kubernetes中&#xff0c;Pod间的直接互联仅是服务通信的基础。要构建一个稳定、弹性且对消费端透明的服务网络&#xff0c;其核心在于Service抽象层。许多开发者对Service的理解仅停留在“一个虚拟IP”的层面&#xff0c;却未能洞悉其背后精妙的流量治理机制&#xff1a;请求…

作者头像 李华
网站建设 2026/4/13 5:08:58

一个免费的在线拼图工具Collaigo

创作背景在社交媒体时代&#xff0c;无论是个人分享生活点滴&#xff0c;还是品牌运营社交媒体账号&#xff0c;拼贴图都成为了内容创作的重要形式。然而&#xff0c;我在使用现有工具时遇到了不少痛点&#xff1a;功能限制&#xff1a;很多工具只能做简单的网格拼图&#xff0…

作者头像 李华