当前位置: 首页 > news >正文

240717.LeetCode——2974.最小数字游戏

题目描述

你有一个下标从 0 开始、长度为 偶数 的整数数组 nums ,同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下:

每一轮,Alice 先从 nums 中移除一个 最小 元素,然后 Bob 执行同样的操作。
接着,Bob 会将移除的元素添加到数组 arr 中,然后 Alice 也执行同样的操作。
游戏持续进行,直到 nums 变为空。
返回结果数组 arr 。

EX1.

在这里插入图片描述

EX2.

在这里插入图片描述

提示

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100
  • nums.length % 2 == 0

代码实现

C语言

暴力解法

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* numberGame(int* nums, int numsSize, int* returnSize)
{int i, j;//定义循环变量int t;//临时交换变量for (i = 0; i < numsSize - 1; i++){for (j = 0; j < numsSize - i - 1; j++){if (nums[j] > nums[j + 1]){t = nums[j];nums[j] = nums[j + 1];nums[j + 1] = t;}}}//进行冒泡排序:对原数组进行从小到大顺序排列for (i = 0; i < numsSize - 1; i = i + 2){t = nums[i];nums[i] = nums[i + 1];nums[i + 1] = t;}//从数组首元素开始进行两两交换*returnSize = numsSize;//注意要返回输出数组的大小return nums;//返回输出数组
}
执行结果

在这里插入图片描述

代码思路

根据题目要求,每次取出两个最小的,放入输出数组,但是顺序不规则。所以不妨将其拆分成两次。先进行规则排序再进行两两交换。所以第一个冒泡排序(很久没有用到,所以模板有些生疏),第二个循环,变量隔了一项进行。

暴力解法优化

/*** Note: The returned array must be malloced, assume caller calls free().*//*
自定义比较函数:用于比较两个元素。比较函数应当返回一个整数,表示比较结果:
小于零:表示第一个元素小于第二个元素。
等于零:表示两个元素相等。
大于零:表示第一个元素大于第二个元素。
*/
int compare(const void* a, const void* b)
{return (*(int*)a - *(int*)b);
}int* numberGame(int* nums, int numsSize, int* returnSize)
{int i, j;int t;qsort(nums, numsSize, sizeof(int), compare);//C库函数,<stdlib.h>中for (i = 0; i < numsSize - 1; i = i + 2){t = nums[i];nums[i] = nums[i + 1];nums[i + 1] = t;}*returnSize = numsSize;return nums;
}
执行结果

在这里插入图片描述

代码思路

对暴力解法进行优化,将冒泡函数进行封装,使用的是C库自带的函数,但需要自己定义一个比较函数,方法减少了空间复杂度。
其中

qsort()函数

声明
void qsort(void *base, size_t nitems, size_t size, int (*compare)(const void *, const void *));
参数

  • base: 指向待排序数组的第一个元素的指针。
  • nitems: 数组中的元素数量。
  • size: 数组中每个元素的大小(以字节为单位)。
  • compare: 比较函数的指针,该函数用于比较两个元素。比较函数应当返回一个整数,表示比较结果。

总结

昨天又没空刷力扣,今天也是终于把江科大51单片机刷完了,也是正式开始学习数据结构与算法了,开始跟夏令营的课程,刷题,今天学的是算法入门和时空复杂度,也学了怎么用MarkDown写文档,现在这篇文档就是用MarkDown编辑器写的,刚好今天周三也是算法日,写到这里已经23.15了哈哈哈哈哈哈哈哈哈哈哈哈,然后的话,就这样吧,保持我的暑期规划不会被破坏,嘿嘿,加油。

相关文章:

  • 数据结构day2
  • 【区块链 + 智慧政务】涉税行政事业性收费“e 链通”项目 | FISCO BCOS应用案例
  • Golang | Leetcode Golang题解之第234题回文链表
  • Qt Style Sheets-样式表语法
  • vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用
  • 微信小程序与本地MySQL数据库通信
  • 2024.7.17 ABAP面试题目总结
  • Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • 3D问界—MAYA制作铁丝栅栏(透明贴图法)
  • 用Python轻松批量生成Word合同:解放双手,喝口咖啡就搞定!☕
  • 【Karapathy大神build-nanogpt】Take Away Notes
  • Android 12系统源码_存储(二)StorageManager类介绍
  • MySQL数据库慢查询日志、SQL分析、数据库诊断
  • 1.厦门面试
  • JS 中的深拷贝与浅拷贝
  • (三)从jvm层面了解线程的启动和停止
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【译】理解JavaScript:new 关键字
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Java基本数据类型之Number
  • Phpstorm怎样批量删除空行?
  • Python socket服务器端、客户端传送信息
  • Python十分钟制作属于你自己的个性logo
  • React组件设计模式(一)
  • 阿里云前端周刊 - 第 26 期
  • 从0到1:PostCSS 插件开发最佳实践
  • 给初学者:JavaScript 中数组操作注意点
  • 给新手的新浪微博 SDK 集成教程【一】
  • 工作中总结前端开发流程--vue项目
  • 嵌入式文件系统
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 正则表达式
  • 终端用户监控:真实用户监控还是模拟监控?
  • 从如何停掉 Promise 链说起
  • ​2020 年大前端技术趋势解读
  • # 计算机视觉入门
  • # 职场生活之道:善于团结
  • #laravel 通过手动安装依赖PHPExcel#
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot教学评价 毕业设计 641310
  • (函数)颠倒字符串顺序(C语言)
  • (四)opengl函数加载和错误处理
  • (一)WLAN定义和基本架构转
  • (一)基于IDEA的JAVA基础12
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)(官方)UE4--图像编程----着色器开发
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .Net8 Blazor 尝鲜
  • .Net程序帮助文档制作