C语言学习--练习2

news2025/3/1 0:19:08

目录

1.排序数组

2.多数元素

3.存在重复元素

4.最大间距

 5.按奇偶排序数组

6.最小时间差


1.排序数组

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int cmp(const void*a,const void*b){
    return *(int*)a-*(int*)b;
}
int* sortArray(int* nums, int numsSize, int* returnSize) {
    qsort(nums,numsSize,sizeof(int),cmp);//对数组a进行排序
    * returnSize=numsSize;
    return nums;
}
//使用C语言内置的快速排序函数qsort()

 详情请看:C语言学习--快速排序函数sqort()-CSDN博客

2.多数元素

方法一:排序计数法:

int cmp(const void*a,const void*b){
    return *(int*)a-*(int*)b;
}
int majorityElement(int* nums, int numsSize) {
    qsort(nums,numsSize,sizeof(int),cmp);//对数组a进行排序
    int ans=0;//用于计数,记录每个元素出现的次数
    int max=0;//用于记录最大次数
    int maxval=nums[0];//用于记录最大次数所对应的元素
    for(int i=1;i<numsSize;i++){
        if(nums[i]==nums[i-1]){//前后相等的话
            ans++;
            if(ans>max){
                max=ans;
                maxval=nums[i];
            }//前后不相等则重新计数
        }else{
            ans=1;

        }
    }//of for
    return maxval;
}

 其实有更简单的方法:摩尔投票算法:C语言学习--摩尔投票算法-CSDN博客

int majorityElement(int* nums, int numsSize) {
int note=nums[0];
int count=1;
for(int i=1;i<numsSize;i++){
    if(nums[i]==note){
        count++;
    }
    else{
        count--;
        if(count<0){
            note=nums[i];
            count=1;
    }
}

}//of for
return note;
//题目默认存在,就不用验算啦

}

3.存在重复元素

/*bool containsDuplicate(int* nums, int numsSize) {
    for(int i=0;i<numsSize;i++){
        for(int j=i+1;j<numsSize;j++){
            if(nums[i]==nums[j]){
                return true;
            }
    }
    }
    return false;
}
*/
//我觉得按道理这样也可以,他非要说超时
int cmp(const void*a,const void*b){
    return *(int*)a-*(int*)b;
}
bool containsDuplicate(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),cmp);//对数组a进行排序
    for(int i=0;i<numsSize-1;i++){
        if(nums[i]==nums[i+1]){
            return true;
        }
    }
    return false;
}

4.最大间距

int cmp(const void* a,const void* b){
    return *(int *)a-*(int *)b;
}
int maximumGap(int* nums, int numsSize) {
    if(numsSize<2) return 0;
    qsort(nums,numsSize,sizeof(int),cmp);//快速排序数组nums[]
    int max=0;//记录最大差值

    for(int i=0;i<numsSize-1;i++){
        if(nums[i+1]-nums[i]>max){
            max=nums[i+1]-nums[i];
        }
    }
    return max;

}

 5.按奇偶排序数组

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
自己:
int* sortArrayByParity(int* nums, int numsSize, int* returnSize) {
    * returnSize=numsSize;
    int *a=(int *)malloc(sizeof(int)*numsSize);//数组a用于记录偶数
    int *b=(int *)malloc(sizeof(int)*numsSize);//数组b用于记录奇数
    int j=0,k=0;
    for(int i=0;i<numsSize;i++){
        if(nums[i]&1){//奇数
            b[k++]=nums[i];
        }else{//偶数
            a[j++]=nums[i];
        }
    }//of for
    for(int i=0;i<j;i++){
        nums[i]=a[i];
    }
    for(int i=0;i<k;i++){
        nums[i+j]=b[i];
    }
    return nums;

}
//看了别人的感觉自己的方法好垃圾啊

方法二:奇数从后面记录,偶数从前面记录
int* sortArrayByParity(int* nums, int numsSize, int* returnSize) {
    int* ret=malloc(sizeof(int)*numsSize);
    *returnSize=numsSize;
    int begin=0,end=numsSize-1;
    for(int i=0;i<numsSize;i++){
        if(nums[i]%2==0){
            ret[begin++]=nums[i];
        }else{
            ret[end--]=nums[i];
        }
    }
    return ret;
}


方法三:直接定义奇偶排序
int cmp(const void* a,const void* b){
    return *(int *)a %2-*(int *)b %2;//偶数排前面
}
int* sortArrayByParity(int* nums, int numsSize, int* returnSize)  {
    
    qsort(nums,numsSize,sizeof(int),cmp);//快速排序数组nums[]
    *returnSize=numsSize;
    return nums;

}

6.最小时间差

 

int cmp(const void* a,const void* b){
    return *(int *)a-*(int *)b;
}
int findMinDifference(char** timePoints, int timePointsSize) {
    //基本思路:新建一个整形数组,将二维字符串数组转化,
    //然后排序
    //然后找到差值最大
    
    int* a=(int *)malloc(sizeof(int)*timePointsSize);
    for(int i=0;i<timePointsSize;i++){
        int h1=timePoints[i][0];//时针十位
        int h2=timePoints[i][1];//时针个位
        int h3=timePoints[i][3];//分针十位
        int h4=timePoints[i][4];//分针个位
        int h=(h1*10+h2)*60+h3*10+h4;//将所有时间转化成分钟数,方便计算分针差值
        a[i]=h;
    }

    qsort(a,timePointsSize,sizeof(int),cmp);//排序时间数组a
    int min=999999;//定义初始最小时间差
    for(int i=1;i<timePointsSize;i++){
        if(a[i]-a[i-1]<min){
            min=a[i]-a[i-1];
        }
        if(min>720){
            min=1440-min;
        }
    min= fmin(min, 1440 - (a[timePointsSize - 1] - a[0]));
//想想为什么要这样取,最小值,假如00:01 ,23:59,你看时间差是多少,
//直接减是不可以的,要取轮转24小时制,也就是两分钟

    }//of for
    return min;

}

加油加油,还有二十天复试,加油加油💪(ง •_•)ง!!

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

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

相关文章

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业&#xff0c;需要进行CVPR2024年医疗影像分割赛题的打榜&#xff08;CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP&#xff09;。看到…

实现消息队列(Kafka、ActiveMQ、RabbitMQ和RocketMQ)高可用

概述 单机没有高可用可言&#xff0c;高可用都对集群来说的 要保证消息队列系统&#xff08;如Kafka、ActiveMQ、RabbitMQ和RocketMQ&#xff09;的高可用性&#xff0c;可以采取以下一些通用的措施&#xff1a; 集群部署&#xff1a;将消息队列系统部署为集群&#xff0c;包…

音视频学习笔记——TCP网络原理

✊✊✊&#x1f308;大家好&#xff01;本篇文章主要记录自己在进行音视频学习中&#xff0c;整理的包括可靠传输、流量控制、拥塞控制等部分TCP网络原理相关的内容重点&#x1f607;。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;…

一个平台满足你对测试工具的所有需求

背景 目前&#xff0c;测试人员普遍使用的测试工具有Postman、JMeter等&#xff0c;但这些工具都存在一定的局限性。例如&#xff0c;Postman缺少对API性能测试方面的支持&#xff0c;而JMeter则缺乏一个整合测试报告、测试脚本的统一管理系统以及UI测试功能。 RunnerGo是什么…

常用的几种concrt140.dll丢失的解决方法,关于concrt140.dll修复教程

concrt140.dll是Microsoft Visual Studio 2015&#xff08;或更高版本&#xff09;中包含的一个动态链接库文件&#xff0c;它是C运行时库的一部分&#xff0c;主要用于支持并行计算、并发处理等功能。当你的应用程序需要执行多线程操作或者使用了C的并发库时&#xff0c;就会依…

windows下编译boost1.84.0库

boost系列文章目录 文章目录 boost系列文章目录前言一、boost编译二、boost使用三 、参考 前言 Boost简介 官方网址 Boost提供免费的同行评审的可移植C源代码库。 我们强调与C标准库配合良好的库。Boost库旨在广泛使用&#xff0c;并可在广泛的应用程序中使用。Boost许可证鼓…

AI预测福彩3D第4弹【2024年3月7日预测】

经过前面几次的预测&#xff0c;7码命中率已经有了明显提高&#xff0c;今天&#xff0c;继续咱们的预测。 老规矩&#xff0c;先给各位展示下百十个的神经网络蒙特卡洛统计频次图及部分号码的冷温热走势图。 最终&#xff0c;经过研判分析&#xff0c;2024年3月7日福彩3D的七…

TikTok矩阵获客软件的核心源代码是什么?

随着互联网的不断发展&#xff0c;社交媒体已成为企业获客的重要渠道之一&#xff0c;在众多的社交媒体平台中&#xff0c;TikTok凭借其庞大的用户群体和活跃的社交氛围&#xff0c;成为了众多企业竞相争夺的营销高地。 在这样的背景下&#xff0c;TikTok矩阵获客软件应运而生…

tiktok矩阵引流系统开发常用源代码!

在数字营销领域&#xff0c;TikTok已成为一个不可忽视的平台&#xff0c;随着其用户基数的不断增长&#xff0c;如何利用TikTok进行有效的引流成为了许多企业和营销人员关注的焦点。 为了实现这一目标&#xff0c;许多开发者开始构建TikTok矩阵引流系统&#xff0c;这些系统通…

AI论文速读 | 【综述】城市计算中跨域数据融合的深度学习:分类、进展和展望

题目&#xff1a;Deep Learning for Cross-Domain Data Fusion in Urban Computing: Taxonomy, Advances, and Outlook 作者&#xff1a;Xingchen Zou, Yibo Yan, Xixuan Hao, Yuehong Hu, Haomin Wen&#xff08;温皓珉&#xff09;, Erdong Liu, Junbo Zhang&#xff08;张钧…

一文读懂HDMI的演变-从HDMI1.0到HDMI2.1(建议收藏)

HDMI&#xff0c;全称为&#xff08;High Definition Multimedia Interface&#xff09;高清多媒体接口&#xff0c;主要用于传输高清音视频信号。 HDMI System HDMI系统包括HDMI的source和HDMI的sink, 其中source 是源端&#xff0c;即信号的来源&#xff1b;Sink的接收端&a…

2024最新GPT4.0使用教程,AI绘画,一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

Unity类银河恶魔城学习记录8-4 P80 Blackhole ability state源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic…

13年测试老鸟,接口性能测试-压测总结汇总,一文概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、概述 性能测试…

Unity性能优化篇(四) GPU Instancing

使用GPU Instancing可以在一个Draw Call中同时渲染多个相同或类似的物体&#xff0c;从而减少CPU和GPU的开销。 官方文档&#xff1a;https://docs.unity3d.com/Manual/GPUInstancing.html 启用GPU Instancing&#xff0c;我们可以选中一个材质&#xff0c;然后在Inspector窗口…

1.3 数据库系统的结构

目录 1.3.1 数据库系统模式的概念 1.3.2 数据库系统的三级模式结构 1. 模式 2. 外模式 3.内模式&#xff08;也称存储模式&#xff09; 1.3.3 数据库的二级映像功能与数据独立性 1.外模式&#xff0f;模式映像 2.模式&#xff0f;内模式映像 1.3.4 总结 模式 内模式…

Vue+OpenLayers7入门到实战:OpenLayers7如何使用gifler库来实现gif动态图图片叠加到地图上

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 OpenLayers7本身不支持gif图片作为图标要素显示到地图上,所以需要通过其他办法来实现支持gif图片。 本章介绍如何使用OpenLayers7在地图上使用gifler库先生成canvas画板,然后通过canvas画板的重绘事件来重新渲染地图…

通过Dockerfile创建镜像

通过Dockerfile创建镜像 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。 docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | -> 1. 常用选项说明--build-arg&#xff0c;设置…

【剑指offer--C/C++】JZ6 从尾到头打印链表

一、题目 二、本人思路及代码 直接在链表里进行翻转不太方便操作&#xff0c;但是数组就可以通过下标进行操作&#xff0c;于是&#xff0c; 思路1、 先遍历链表&#xff0c;以此存到vector中&#xff0c;然后再从后往前遍历这vector,存入到一个新的vector&#xff0c;就完成…