C语言leetcode刷题笔记2

news2024/12/24 21:22:35

C语言leetcode刷题笔记2

  • 第4题:283.移动零
    • 互换
    • 直接移动
  • 第5题:122.买卖股票的最佳时机‖
    • 递归(超时)
    • 动态规划
    • 贪心算法
  • 第6题:49.字母异位词分组
    • 优化

第4题:283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

互换

void moveZeroes(int* nums, int numsSize) {
    int i,j,temp;
    int count=0;
    while(true){
        count=0;
        for(i=0;i<numsSize-1;i++)
         {
            if(nums[i]==0&&nums[i+1]!=0)
            {
                count++;
                temp =nums[i];
                nums[i]=nums[i+1];
                nums[i+1]=temp;
                

            }

         }
         if(count==0)break;

    }
    
    
}

在这里插入图片描述

void moveZeroes(int* nums, int numsSize) {
    int i,j,temp;
    for(j=1;j<numsSize;j++)
    {
        for(i=0;i<numsSize-1;i++)
         {
            if(nums[i]==0&&nums[i+1]!=0)
            {
                temp =nums[i];
                nums[i]=nums[i+1];
                nums[i+1]=temp;

            }

         }

    }
    
    
}

在这里插入图片描述

直接移动

//建立新数组,把不是0的先放进去,剩下的都是0,再赋值回去
//优化:直接在原来数组上操作
void moveZeroes(int* nums, int numsSize) {
    int count=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]!=0){
            nums[count++]=nums[i];
            
        }
    }
    for(int i=count;i<numsSize;i++)
    {
        nums[count++]=0;

    }
    
}

第5题:122.买卖股票的最佳时机‖

一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。

示例 1:

输入:prices = [7,1,5,3,6,4]
输出:7
解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。
总利润为 4 + 3 = 7 。

递归(超时)

int maxProfit(int* prices, int pricesSize) {
    int res=0;
    int profit=0;
    if(pricesSize==1)return 0;
//[7,1,5,3,6,4]
    //假设最后一天不卖
    profit=maxProfit(prices, pricesSize-1);
    res=profit>res?profit:res;

    //假设最后一天卖
    //maxProfit([7,1,5,3,6])+4-4
    //maxProfit([7,1,5,3])+4-6
    //...
    //maxProfit([7])+4-1
    for(int i=1;i<pricesSize;i++)
    {
        profit=maxProfit(prices, i)+prices[pricesSize-1]-prices[i-1];
        res=profit>res?profit:res;

    }
    return res;
    
}

在这里插入图片描述
递归次数过多导致超时,建立数组存储数据

动态规划

int maxProfit(int* prices, int pricesSize) {
    if(pricesSize==1)return 0;
    int profits[pricesSize+1];//profits[i]=maxProfit(prices,i);
    profits[1]=0;
    for(int k=2;k<=pricesSize;k++)
    {
        int res=0;
        int profit=0;
        
    //[7,1,5,3,6,4]
        //假设最后一天不卖
        profit=profits[k-1];//maxProfit(prices, pricesSize-1);
        res=profit>res?profit:res;

        //假设最后一天卖
        //maxProfit([7,1,5,3,6])+4-4
        //maxProfit([7,1,5,3])+4-6
        //...
        //maxProfit([7])+4-1
        for(int i=1;i<k;i++)
        {
            profit=profits[i]+prices[k-1]-prices[i-1];
            res=profit>res?profit:res;

        }
        profits[k]=res;
    }
    return profits[pricesSize];
    
}

在这里插入图片描述

贪心算法

//贪心算法 只要涨了就卖
int maxProfit(int* prices, int pricesSize) {
    int to=0;
    for(int i=1;i<pricesSize;i++)
    {
        if(prices[i]>prices[i-1])to+=prices[i]-prices[i-1];

    }
    return to;
    
}

第6题:49.字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
 struct pair{
    char * s1;
    char * s1_qsort;
 };
 typedef struct pair Pair;
 int cmp(void *a,void *b)
 {
    return (*(char *)a -  *(char *)b);
    //return ( *(int*)a - *(int*)b );
 }
 int paircmp(void *a,void *b)
 {
    Pair * Pa=(Pair*)a;
    Pair * Pb=(Pair*)b;
    return strcmp(Pa->s1_qsort,Pb->s1_qsort);
 }
char*** groupAnagrams(char** strs, int strsSize, int* returnSize, int** returnColumnSizes) {
    *returnSize=0;
    * returnColumnSizes=NULL;
    char***res=NULL;
    Pair * pairs=(Pair *)malloc(sizeof(Pair)*strsSize);

    for(int i=0;i<strsSize;i++)
    {
        pairs[i].s1=strs[i];
        pairs[i].s1_qsort=(char*)malloc(sizeof(char)*(strlen(strs[i])+1));
        strcpy(pairs[i].s1_qsort,pairs[i].s1);
        qsort(pairs[i].s1_qsort,strlen(strs[i]),sizeof(char),cmp);
        
    }
    qsort(pairs,strsSize,sizeof(Pair),paircmp);
    int group=0;//记录最后组坐标
    int index=0;//记录组内坐标
    for(int i=0;i<strsSize;i++)
    {
        if(i==0)
        {
            group=0;
            index=0;
            *returnSize=group+1;//1zu
     
            *returnColumnSizes=(int*)malloc(sizeof(int)*1);
            (*returnColumnSizes)[group]=index+1;
            res=(char***)malloc(sizeof(char**)*(*returnSize));
            res[group]=(char**)malloc(sizeof(char*)*((*returnColumnSizes)[group]));
            res[group][index]=(char*)malloc(sizeof(char)*(strlen(pairs[i].s1)+1));
            strcpy(res[group][index],pairs[i].s1);
            

        }
        else
        {
            if(strcmp(pairs[i-1].s1_qsort,pairs[i].s1_qsort)!=0)//no equal
            {
                group++;
                index=0;
                *returnSize=group+1;//group++
        
                *returnColumnSizes=(int*)realloc(*returnColumnSizes,sizeof(int)*(group+1));
                (*returnColumnSizes)[group]=index+1;
                res=(char***)realloc(res,sizeof(char**)*(group+1));
                res[group]=(char**)malloc(sizeof(char*)*(index+1));
                res[group][index]=(char*)malloc(sizeof(char)*(strlen(pairs[i].s1)+1));
                

            }
            else//equal
            {
                index++;
                (*returnColumnSizes)[group]=index+1;
                res[group]=(char**)realloc(res[group],sizeof(char*)*(index+1));
                res[group][index]=(char*)malloc(sizeof(char)*(strlen(pairs[i].s1)+1));              

            }
            strcpy(res[group][index],pairs[i].s1);

        }
        
        
        
    }


    return res;
}

优化

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
 struct pair{
    char * s1;
    char * s1_qsort;
 };
 typedef struct pair Pair;
 int cmp(void *a,void *b)
 {
    return (*(char *)a -  *(char *)b);
    //return ( *(int*)a - *(int*)b );
 }
 int paircmp(void *a,void *b)
 {
    Pair * Pa=(Pair*)a;
    Pair * Pb=(Pair*)b;
    return strcmp(Pa->s1_qsort,Pb->s1_qsort);
 }
char*** groupAnagrams(char** strs, int strsSize, int* returnSize, int** returnColumnSizes) {
    int NofG[10000]={0};//记录每组总个数
    int Gs=0,Gc=0;
    *returnSize=0;
    * returnColumnSizes=NULL;
    char***res=NULL;
    Pair * pairs=(Pair *)malloc(sizeof(Pair)*strsSize);

    for(int i=0;i<strsSize;i++)
    {
        pairs[i].s1=strs[i];
        pairs[i].s1_qsort=(char*)malloc(sizeof(char)*(strlen(strs[i])+1));
        strcpy(pairs[i].s1_qsort,pairs[i].s1);
        qsort(pairs[i].s1_qsort,strlen(strs[i]),sizeof(char),cmp);
        
    }
    qsort(pairs,strsSize,sizeof(Pair),paircmp);
    for(int i=0;i<strsSize;i++)
    {
        
        if(i==0)//no equal
        {
            Gc=1;
            
        }
        else
        {
            if(strcmp(pairs[i-1].s1_qsort,pairs[i].s1_qsort)!=0)//no equal
            {
                
                NofG[Gs]=Gc;
                //printf("%d NofG[Gs]=%d\n",i,NofG[Gs]);
                Gc=1;
                Gs++;

            }
            else
            {
                Gc++;

            }
            
            
        }


    }
    NofG[Gs++]=Gc;
    res=(char***)malloc(sizeof(char**)*Gs);
    *returnColumnSizes=(int*)malloc(sizeof(int)*(Gs));
    *returnSize=Gs;
    for(int i=0;i<Gs;i++)
    {
        res[i]=(char**)malloc(sizeof(char*)*(NofG[i]));
        (*returnColumnSizes)[i]=NofG[i];

    }
    
    int group=-1;//记录最后组坐标
    int index=0;//记录组内坐标

    for(int i=0;i<strsSize;i++)
    {
        
            if(i==0||strcmp(pairs[i-1].s1_qsort,pairs[i].s1_qsort)!=0)//no equal
            {
                group++;
                index=0;
            }
            else//equal
            {
                index++;
              
            }
             res[group][index]=(char*)malloc(sizeof(char)*(strlen(pairs[i].s1)+1));  
            strcpy(res[group][index],pairs[i].s1);               
    }
    return res;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100G ZR4 80KM光模块产品亮点有哪些

之前的文章我们介绍了100G ZR4 80KM光模块的产品特征以及技术原理等&#xff0c;那本期文章我们来了解一下易天第二代100G ZR4 80KM光模块的产品亮点。 首先我们通过下面这张表格以最直观的方式来了解第一代和第二代100G ZR4 80KM光模块在工作温度、功耗、FEC纠错等方面有哪些…

哪个可以下载视频素材?哪里有视频素材网站啊?

在这个视频内容日益重要的世界里&#xff0c;选择正确的可商用素材网站可以极大提升您的项目质量。下面是另一批国内外知名的视频素材网站&#xff0c;希望能为您的创作提供新的灵感。 1. 蛙学府 提供广泛的创意资产&#xff0c;包括高分辨率的视频素材。订阅后用户可无限次下…

VIsualGDB : 快速入门系列

《VisualGDB &#xff1a; 解决编码导致的编译错误》 《VisualGDB &#xff1a; 在windows上开发和调试Linux代码&#xff08;一&#xff09;》 《VisualGDB&#xff1a;为Linux项目添加系统依赖库》 《VisualGDB&#xff1a;Linux动态库项目创建、编译及库的使用》 《VisualGD…

点击导航栏选项后,导航栏高亮该选项

如图所示&#xff0c;点击“流浪猫客栈”时&#xff0c;会一直高亮显示&#xff0c;表示现在看的是这个选项的页面。 Cat.jsp上写&#xff1a; <!--header--> <jsp:include page"header.jsp"><jsp:param name"flag" value"3">…

中国科技大航海时代,“掘金”一带一路

文&#xff5c;白 鸽 编&#xff5c;王一粟 “这不就是90年代的内地吗&#xff1f;” 在深度考察完沙特市场后&#xff0c;华盛集团联合创始人兼CEO张霆对镜相工作室感慨道。 在张霆看来&#xff0c;沙特落后的基建&#xff08;意味着大量创新空间&#xff09;、刚刚开放…

邮件系统国产化,保障企业信息安全的重要举措

随着信息技术日益发展和成熟&#xff0c;企业信息化建设深入推进&#xff0c;企业信息化管理能力大幅提升&#xff0c;其中邮件系统在企业信息化建设中扮演着至关重要的角色。然而&#xff0c;长期以来&#xff0c;我国企业在邮件系统方面主要依赖于国外的产品&#xff0c;这不…

【Linux系统】进程控制

再次理解进程 进程&#xff1a;内核的相关管理数据结构(task_struct(进程控制块PCB)&#xff0c;mm_struct(地址空间)&#xff0c;页表) 代码和数据 那么如何理解进程具有独立性&#xff1f; 我们之前已经学习过进程控制块啊&#xff0c;地址空间啊&#xff0c;页表啊&…

Linux-笔记 修改开发板默认时区

1. 时区文件 使用命令date -R查看当前的默认时区&#xff0c;date - R命令会自动解析/etc/localtime 文件&#xff0c;而该文件又是指向“ /usr/share/zoneinfo/$主时区/$次时区 ”&#xff0c;当需要更改到指定的时区只要将/etc/localtime 文件软链接到 ”/usr/share/zoneinf…

c++ libtorch使用cmake建立

如果我们安装好pytorch&#xff0c;其实不一定一定要安装libtorch&#xff0c;默认都已经安装过了 1 进入pytorch conda env list conda activate pytorch 命令行下使用 python -c 来获取libtorch的基本信息&#xff0c; python -c "import torch;print(torch.utils.c…

1.基于python的单细胞数据预处理-质量控制

目录 质量控制过滤低质量细胞的指南双细胞过滤手动过滤低质量读数细胞自动过滤低质量读数细胞环境RNA校正 参考&#xff1a; [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 质量控制 原始的单细胞…

[C++核心编程-05]----C++类和对象之对象的初始化和清理

目录 引言 正文 01-构造函数和析构函数 ​02-构造函数的分类及调用 03-拷贝构造函数调用时机 04-构造函数调用规则 05-深拷贝与浅拷贝 06-初始化列表 07-静态成员变量 08-静态成员函数 …

vue3 - 150

目录 vue优势使用方式编写vue代码指令响应式数据其他 vue优势 功能全面生态好&#xff0c;语法简洁效率高&#xff0c;免去 DOM 操作苦&#xff0c;开发重任一肩挑&#xff01; 使用方式 1.通过cdn引入来将 Vue 应用到整个页面 2.或通过官方脚手架 create-vue来创建完整的v…

Spring-依赖来源

依赖来源 1 Spring BeanDefinition&#xff08;xml,注解&#xff0c;BeanDefinitionBuilder, 还有API实现的单例对象&#xff09; 2 Spring 内建BeanDefinition 3 内建单例对象 依赖注入和依赖查找的区别 Context.refresh() 的时候会调用这个方法&#xff1a;prepareBeanF…

【Linux】-Linux用户和权限[3]

一、认知root用户 1、root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大权限的账户为&#xff1a;root&#xff08;超级管理员&#xff09; root用户拥有最大的系统操作权限…

多线程三种实现

多线程 线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 &#xff08;理解&#xff1a;应用软件中互相独立&#xff0c;可以同时运行的功能&#xff09; 进程 进程是程序的基本执行实体。&#xff08;理解&#…

部署JVS服务出现上传文件不可用,问题原因排查。

事情的起因是这样的&#xff0c;部门经理让我部署一下JVS资源共享框架&#xff0c;项目的地址是在这里 项目资源地址 各位小伙伴们做好了&#xff0c;我要开始发车了&#xff0c;全新的“裂开之旅” 简单展示一下如何部署JVS文档 直达链接 撕裂要开始了 本来服务启动的好好…

SpringBoot结合Canal 实现数据同步

1、Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具&#xff0c;用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…

使用tkinter开发的一款可扫描并删除本地文件敏感词的Windows软件

大致功能&#xff1a;可指定扫描Windows上的某个目录的所有文件&#xff0c;单个文件扫描&#xff0c;目前适配支持的文件后缀有&#xff1a;"pdf"、"txt、"doc"、"docx"&#xff0c;软件是开源的&#xff0c;大家可以在此基础上扩展更多类…

什么是HTTP?

什么是HTTP&#xff1f; HTTP基本概念HTTP 是什么&#xff1f;HTTP 常见的状态码有哪些&#xff1f;HTTP 常见字段有哪些&#xff1f; HTTP特性HTTP/1.1 的优点有哪些&#xff1f;HTTP/1.1 的缺点有哪些&#xff1f; HTTP基本概念 HTTP 是什么&#xff1f; HTTP 是超文本传输…

44.乐理基础-音符的组合方式-附点

内容参考于&#xff1a; 三分钟音乐社 首先如下图&#xff0c;是之前的音符&#xff0c;但是它不全&#xff0c;比如想要一个三拍的音符改怎样表示&#xff1f; 在简谱中三拍&#xff0c;在以四分音符为一拍的情况下&#xff0c;在后面加两根横线就可以了&#xff0c;称为附点…