• 数据结构:顺序表


    数据结构定义

    1. #define maxn 1010
    2. #define Datatype int
    3. struct Seqlist{
    4. Datatype data[maxn];
    5. int length;
    6. }

    只读接口:索引

    1. Datatype Seqlistindex(struct Seqlist *sq,int i){
    2. return sq->data[i];

    只读接口:查找

    1. Datatype SwqlistFind(struct seqlist *sq,Datatype dt){
    2. int i;
    3. for(i=0;i->length;i++){
    4. if(sq->data[i]==dt){
    5. return i;
    6. }
    7. }
    8. return -1;
    9. }

    只读接口:获取长度

    1. Datatype Seqlistgetlength(struct Seqlist *sq){
    2. return sq->length;
    3. }

    可写接口:插入

    1. int  SeqListInsert(struct SeqList *sq, int k, DataType v){
    2. int i;
    3. if(sq->length==maxn){
    4. return 0;
    5. }
    6. for(i=sq->length;i>k;i--){
    7. sq-data[i]=sq->[i-1];
    8. }
    9. sq->data[k]=v;
    10. sq->length++;
    11. }

    可写接口:删除

    1. int SeqListDelete(struct SeqList *sq, int k) {
    2. int i;
    3. if(sq->length == 0) {
    4. return 0;                      
    5. for(i = k; i < sq->length - 1; ++i) {
    6. sq->data[i] = sq->data[i+1];     
    7. sq->length --;                       
    8. return 1;                              
    9. }

    1,线性枚举 :给定一个长度为n(1≤n≤10^5)的整型数组,求所有数组元素中的其中的最小值。遍历数组,进行条件判断,条件满足则执行逻辑。这里的条件就是 枚举到的数 是否小于 当前最小值,执行逻辑为 将 当前枚举到的数 赋值给 当前最小值;

    1. int findMin(int *nums,int numsize){
    2. int i,mins=100000;
    3. for(i=0;i
    4. if(nums[i]
    5. mins=nums[i];
    6. }
    7. }
    8. return mins;
    9. }

    2,给定一个n(n≤10^5)个元素的整型数组a_i,再给出m(m≤10^5)次询问,每次询问是一个区间[l,r],求h(l,r)=ak(k为1到r的和)。 第一个枚举,利用一个数组sum,存储前i个元素的和。 第二个枚举,读入 m 组数据 l,r,对每组数据,通过 O(1) 获取答案,即 sum_r - sum_{r-1}

    1. int sum[maxn];
    2. int *prefixmax(int *nums,int numsize,int m,int *l,int *r){
    3. int i;
    4. int *ret;
    5. for(i=0;i
    6. sum[i]=nums[i]
    7. if(i){
    8. sum[i]+=nums[i];
    9. }
    10. }
    11. ret=(int *)malloc(sizeof(int)*m);
    12. for(i=0;i
    13. int leftsum=l[i]==0?0:l[i]-1;
    14. int rightsum=r[i];
    15. ret[i]=ret[leftsum]-ret[rightsum];
    16. }
    17. return ret;
    18. }

    双指针:给定一个长度为n(1≤n≤10^7)的字符串s,求一个最长的满足所有字符不重复的子串。 维护两个指针i和j,区间[i,j] 内的子串,应该时刻保持其中所有字符不重复,一旦发现重复字符,就需要自增 i(即执行 i=i+1);否则,执行j=j+1,直到j不能再增加为止。 过程中,记录合法情况下j−i+1 的最大值。

    1. int getmaxlen(int n,char *str,int &l,int &r){
    2. int ans=0,i=0,j=-1,len;
    3. memset(h,0,sizeof(h));
    4. while(j++1){
    5. ++h[str[j]];
    6. if(h[str[j]]>=2){
    7. --h[str[i]];//表示重新计算,如果str[i]对于的哈希表不减一,会影响后面做出的判断,相当于字符串从i之后开始计算
    8. i++;
    9. }
    10. }
    11. len=j-i+1;
    12. if(len>ans){
    13. ans=len;l=i;r=j;
    14. }
    15. return ans;
    16. }

    二分枚举:给定一个 n(n≤10^6)个元素的有序整型数组和一个target 值,求在 O(log_2n)的时间内找到值为target的整型的数组下标,不存在则返回-1。
    a)令初始情况下,数组下标从 0 开始,且数组长度为n,则定义一个区间,它的左端点是l=0,右端点是 r=n−1;
    b)生成一个区间中点 mid=(l+r)/2,并且判断 mid 对应的数组元素和给定的目标值的大小关系,主要有三种:     
    b.1)目标值 等于 数组元素,直接返回 mid;     
    b.2)目标值 大于 数组元素,则代表目标值应该出现在区间 [mid+1,r],迭代左区间端点l=mid+1;    
    b.3)目标值 小于 数组元素,则代表目标值应该出现在区间 [l,mid−1],迭代右区间端点:r=mid−1;   
    c)如果这时候 l>r,则说明没有找到目标值,返回−1;否则,回到 b)继续迭代。

    1. int search(int *nums,int target,int numsize){
    2. int l=0,r=numsize-1;
    3. while(l
    4. int mid=(r+l)>>1;
    5. if(nums[mid]==target){
    6. return mid;
    7. }else if(nums[mid]>target){
    8. r=mid+1;
    9. }else if(nums[mid]
    10. l=mid-1
    11. }
    12. }
    13. return -1;
    14. }

    插入排序: 给定一个 n 个元素的数组,数组下标从 0 开始,采用「 插入排序 」将数组按照 「升序」排列。

    1. void insertsort(int *a,int n){
    2. int x,i,j;
    3. for(i=1;i
    4. x=a[i];
    5. for(j=i-1;j>=0;j--){
    6. if(a[j]>=x){
    7. a[j+1]=a[j];
    8. }else{
    9. break;
    10. }
    11. a[j+1]=x;
    12. }
    13. }
    14. }

    冒泡排序:给定一个 n 个元素的数组,数组下标从 0 开始,采用「 冒泡排序 」将数组按照 「升序」排列

    1. void SelectionSort(int n, int *a) {  
    2. int i, j;
    3. for(i = 0; i < n - 1; ++i) {    
    4. int min = i;                 
    5. for(j = i+1; j < n; ++j) {  
    6. if(a[j] < a[min]) {
    7. min = j;             
    8. }
    9. }
    10. Swap(&a[i], &a[min]);       
    11. }
    12. }

    选择排序:给定一个 n 个元素的数组,数组下标从 0 开始,采用「 选择排序 」将数组按照 「升序」排列。

    1. void SelectionSort(int n, int *a) {  
    2. int i, j;
    3. for(i = 0; i < n - 1; ++i) {     
    4. int min = i;                
    5. for(j = i+1; j < n; ++j) {   
    6. if(a[j] < a[min]) {
    7. min = j;             
    8. }
    9. }
    10. Swap(&a[i], &a[min]);         
    11. }
    12. }
  • 相关阅读:
    Oracle RAC ASM磁盘组删除、添加磁盘
    7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么
    万字文章|JDK动态代理及其源码解析 拿捏了
    【仿牛客网笔记】 Spring Boot进阶,开发社区核心功能-发布帖子
    亚信安全入选中国数据安全市场图谱
    标准的听觉检测环境应满足哪些条件?
    人工智能术语翻译(五)
    [论文笔记]P-tuning
    Javascript的事件循环机制
    Python 既是解释型语言,也是编译型语言
  • 原文地址:https://blog.csdn.net/weixin_44703938/article/details/126188810