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

C语言 | Leetcode C语言题解之第324题摆动排序II

题目:

题解:

static inline void swap(int *a, int *b) {int c = *a;*a = *b;*b = c;
}static inline int partitionAroundPivot(int left, int right, int pivot, int *nums) {int pivotValue = nums[pivot];int newPivot = left;swap(&nums[pivot], &nums[right]);for (int i = left; i < right; ++i) {if (nums[i] > pivotValue) {swap(&nums[i], &nums[newPivot++]);}}swap(&nums[right], &nums[newPivot]);return newPivot;
}static int findKthLargest(int* nums, int numsSize, int k) {int left = 0, right = numsSize - 1;srand(time(0));while (left <= right) {int pivot = rand() % (right - left + 1) + left;int newPivot = partitionAroundPivot(left, right, pivot, nums);if (newPivot == k - 1) {return nums[newPivot];} else if (newPivot > k - 1) {right = newPivot - 1;} else { left = newPivot + 1;}}return nums[k - 1];
}static inline int transAddress(int i, int n) {return (2 * n - 2 * i - 1) % (n | 1);
}void wiggleSort(int* nums, int numsSize) {int x = (numsSize + 1) / 2;int mid = x - 1;int target = findKthLargest(nums, numsSize, numsSize - mid);for (int k = 0, i = 0, j = numsSize - 1; k <= j; k++) {if (nums[transAddress(k, numsSize)] > target) {while (j > k && nums[transAddress(j, numsSize)] > target) {j--;}swap(&nums[transAddress(k, numsSize)], &nums[transAddress(j--, numsSize)]);}if (nums[transAddress(k, numsSize)] < target) {swap(&nums[transAddress(k, numsSize)], &nums[transAddress(i++, numsSize)]);}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • word加密文档忘记密码要如何打开
  • Linux的目录文件函数接口,链接文件函数接口,获得文件详细信息
  • 【嵌入式】RTOS和Linux的区别
  • ios如何动态添加控件及动画
  • Unity补完计划 之 必须学会的Tile拓展内容(新增瓦片)
  • 关于地址的级联选择器
  • 宝塔nginx安装geoip2
  • iOS弱引用
  • 【Apache Doris】周FAQ集锦:第 18 期
  • 正则表达式测试工具
  • 【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
  • [Git][分支设计规范]详细讲解
  • VSCode在windows系统下的配置简单版
  • ArcGIS for js 缓冲(vue项目)
  • 代码”byte a = 0Xa1“为什么会报编译错误?
  • AngularJS指令开发(1)——参数详解
  • ECMAScript6(0):ES6简明参考手册
  • es6要点
  • Laravel 菜鸟晋级之路
  • MQ框架的比较
  • react 代码优化(一) ——事件处理
  • Redux系列x:源码分析
  • SQL 难点解决:记录的引用
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 汉诺塔算法
  • 面试总结JavaScript篇
  • 使用 Docker 部署 Spring Boot项目
  • 用Python写一份独特的元宵节祝福
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • !$boo在php中什么意思,php前戏
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (ros//EnvironmentVariables)ros环境变量
  • (windows2012共享文件夹和防火墙设置
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (十六)串口UART
  • (算法)求1到1亿间的质数或素数
  • (转)IOS中获取各种文件的目录路径的方法
  • ***原理与防范
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core中Emit的使用
  • .Net Web项目创建比较不错的参考文章
  • .NetCore部署微服务(二)
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /etc/sudoer文件配置简析
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @PreAuthorize与@Secured注解的区别是什么?
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku