C语言学习--练习2

目录

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 forreturn 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 forfor(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);//排序时间数组aint 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 forreturn min;}

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

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

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

相关文章

C语言抽象代码(其五)

水博客 今天突发奇想&#xff0c;可不可以用中文写代码。 然后我发现可以用#define完成。 我们看代码 非常好理解就是用前面代替后面。比如&#xff1a; 主函数 代替 int main 非常简单

二叉搜索树题目:二叉搜索树迭代器

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉搜索树迭代器 出处&#xff1a;173. 二叉搜索树迭代器 难度 4 级 题目…

计讯物联智慧工业园区系统平台全面提升园区智能化水平

工业园区聚集着各种生产要素&#xff0c;是纺织、机械、家具等诸多产业集中的区域&#xff0c;更是资源消耗和污染物排放的集中地。根据某些工业园区环境调研&#xff0c;园区入驻企业从生产原料到生产制造过程大多带有有毒有害、易燃易爆的特性&#xff0c;再加上装置大型化、…

SpringBoot 热部署。

SpringBoot 热部署。 文章目录 SpringBoot 热部署。 pom.xml。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional…

LeetCode-第137题-只出现一次的数||

1.题目描述 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 2.样例描述 3.思路描述 先把数组排序&am…

M2TS转MP4怎么转?超快的方法~

M2TS格式的优点主要体现在对高清视频的完美支持&#xff0c;能够提供极致的视觉体验。然而&#xff0c;由于其相对较大的文件大小&#xff0c;有时可能不太适合网络传输。此外&#xff0c;部分不支持M2TS的播放设备可能导致一定的兼容性问题。 想要播放m2ts视频&#xff0c;可…

【kubernetes】关于k8s集群如何将pod调度到指定node节点?

目录 一、k8s的watch机制 二、scheduler的调度策略 Predicate&#xff08;预选策略&#xff09; 常见算法&#xff1a; priorities&#xff08;优选策略&#xff09;常见的算法有&#xff1a; 三、k8s的标签管理之增删改查 四、k8s的将pod调度到指定node的方法 方案一&am…

DFS回溯-经典全排列问题(力扣)

前言 对于全排列问题&#xff0c;常用的做法是设置一个vis数组来确定位置i上的数字是否被访问&#xff0c;因为是全排列问题&#xff0c;所以不同的顺序也是不一样的排列&#xff0c;因此每次都是从起点开始询问**(注意起点到底是0还是1)** 46全排列(最简单的模板) class So…

某资产管理系统打点过程中的免杀经历

上周&#xff0c;被扔过来单位内部的一个链接&#xff0c;让渗透一下&#xff0c;本以为三下五除二很快就能测完&#xff0c;没想到在对抗杀软时费了一番功夫&#xff0c;再加上杂七杂八的事儿&#xff0c;经过了一个星期才测完(&#xff03;&#xffe3;&#xff5e;&#xff…

C#知识点-21(初识数据库)

数据库与内存、文件的比较 内存&#xff1a; 优点&#xff1a;存取速度快 缺点&#xff1a;-容量小 -断电后&#xff0c;数据不会保存 文件&#xff1a; 优点&#xff1a;数据可以持久化保存 缺点&#xff1a;-读取速度慢…

mprpc分布式RPC网络通信框架

mprpc 项目介绍 该项目是一个基于muduo、Protobuf和Zookeeper实现的轻量级分布式RPC网络通信框架。 可以把任何单体架构系统的本地方法调用&#xff0c;重构成基于TCP网络通信的RPC远程方法调用&#xff0c;实现同一台机器的不同进程之间的服务调用&#xff0c;或者不同机器…

下载无水印抖音视频

在抖音看到某些视频想下载&#xff0c;却出现无法保存在本地【显示"作品暂时无法保存,链接已复制"】。或者下载的视频有水印。 而某些微信小程序下载可能需要付费或者有水印。其实我们可以直接使用电脑浏览器直接下载。 举个例子: 这是来自王道官方账号的一条视频链…

基于springboot的某大学外卖系统的实现(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1 后台登录 2管理员界面 3员工信息管理 4客户信息管理 三、库表设计 四、论文 前言 如今&#xff0c;信息化不断的高速发展&#xff0c;社会也跟着不断进步&#xff0c;现今的社会&#xff0c;各种工作都离不开信息化技…

Python基础二

一、变量 在编程中&#xff0c;变量是用来存储数据值的名称。在 Python 中&#xff0c;变量是动态类型的&#xff0c;这意味着你可以将任何类型的数据分配给一个变量&#xff0c;而不需要提前声明变量的类型。 1、全局变量 在函数外部定义的变量是全局变量&#xff0c;可以在程…

boost 编译

参考博客&#xff1a;vs2019 boost 入坑指南 boost下载 官方网站&#xff1a;https://www.boost.org/ 下面以boost_1_73_0为例&#xff1a; boost编译 解压boost_1_73_0.zip运行bootstrap.bat&#xff08;此时目录下会生成b2.exe&#xff09;编译boost b2 install --build…

【vue2项目总结】——动态渲染

文章目录 主页渲染封装接口页面调用传到子组件 搜索列表渲染根据关键字搜索分类id搜索 主页渲染 封装接口 封装准备接口 api/home.js import request from /utils/request// 获取首页数据 export const getHomeData () > {return request.get(/page/detail, {params: {p…

springboot3.x集成SpringDoc Swagger3

近期将springboox2.x升级到了3.x&#xff0c;索性将swagger2也同步升级到swagger3&#xff0c;具体过程如下。 一、添加maven依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>…

用户角色的重要性:确保财务数据安全的最佳方式

在企业的财务管理业务中&#xff0c;一个人几乎不可能完成所有的财务记账任务&#xff0c;例如设定预算、发票审批等等&#xff0c;至少不能有效地执行。最为明智的方式&#xff0c;是将这些任务分派给特定的人员&#xff0c;比如部门经理、财务经理或者销售、市场人员等等。 但…

C++读取NC数据的结果与真实数值不一致的解决方法

本文介绍基于C 语言的netCDF库读取.nc格式的栅格文件时&#xff0c;代码读取到的数据与栅格文件的实际数据不一致的解决方法。 最近&#xff0c;由于需要读取ERA5气象数据&#xff0c;因此使用C 语言中的netCDF库读取.nc格式文件。其中&#xff0c;偶然发现在Visual Studio的代…

CC攻击的特征和防护措施

随着互联网的快速发展&#xff0c;网络攻击日益频繁。在目前的各种网络攻击中&#xff0c;CC攻击是一种常见的网络攻击手段之一。CC攻击&#xff08;也称为DDoS攻击&#xff09;是指通过大量请求或恶意流量向目标网站或服务器发送请求&#xff0c;以使其服务不可用。可能大家都…