目录
文章目录
零、写在前面
一、最小时间差
二、有序数组的平方
三、优势洗牌 (不会,以后二刷的时候填上)
四、救生艇
零、写在前面
真的是难啊 QAQ QAQ
本章知识回顾:这一章主要描述了快速排序的方法
动图建议手机录下来然后0.5倍速暂停着看(有动图)
《算法零基础100讲》(第37讲) 排序进阶 - 快速排序_英雄哪里出来-CSDN博客快速排序,真的够快吗?https://blog.csdn.net/WhereIsHeroFrom/article/details/121551692每天会开启一篇试读文章,每日坚持打卡就可以一直白嫖哦
void Swap(int *a, int *b) {// 交换两个数的位置 int tmp = *a; *a = *b; *b = tmp; } int Partition(int a[], int l, int r){ // int i, j, pivox; int idx = l + rand() % (r - l + 1); // 随机取基准数下标,rand()函数生成随机数对数组长度 //求余 pivox = a[idx]; // 基准数 Swap(&a[l], &a[idx]); //把基准数换到第一个位置 i = j = l + 1; //初始化下标,准备开始遍历 while( i <= r ) { //遍历到最右端 if(a[i] < pivox) { //当++i之后再进入循环时候,i和j交换就是了两个不同数交换了 Swap(&a[i], &a[j]); //就是a[i]遍历时候先大于pivox,再小于pivox的时候 ++j; //就会把大的数换到数组后边 } ++i; // } Swap(&a[l], &a[j-1]); // 把a[l]换到第一个大于pivox的数前面 return j-1; //返回以已经确认的这个基准数的位置//这样就保证了前边数小于pivox后边数大于pivox } //递归进行划分 void QuickSort(int a[], int l, int r){ if(l < r){ int mid = Partition(a, l, r); //递归分段 QuickSort(a, l, mid-1); QuickSort(a, mid+1, r); } }一、最小时间差
1.题目
给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例 1:
输入:timePoints = ["23:59","00:00"]
输出:1
力扣https://leetcode-cn.com/problems/minimum-time-difference/
2.题解
思路;排序,相邻的相减,第一个和最后一个再减一下,找最小的
void swap(int*a,int*b){ int tmp=*a; *a=*b; *b=tmp; } int Partition(int a[],int l,int r){ int i,j,pivox; int idx=l+rand()%(r-l+1); pivox=a[idx]; swap(&a[l],&a[idx]); i=j=l+1; while(i<=r){ if(a[i]sum?sum:ans; } if(nums[0]+1440-nums[timePointsSize-1]
3.结果
二、有序数组的平方1.题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
力扣https://leetcode-cn.com/problems/squares-of-a-sorted-array/
2.题解
思路:平方后存在数组里,然后一个快速排序
void swap(int*a,int*b){ int tmp=*a; *a=*b; *b=tmp; } int Partition(int a[],int l,int r){ int i,j,pivox; int idx=l+rand()%(r-l+1); pivox=a[idx]; i=j=l+1; swap(&a[l],&a[idx]); while(i<=r){ if(a[i]3.结果
三、优势洗牌 (不会,以后二刷的时候填上)1.题目
给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。
返回 A 的任意排列,使其相对于 B 的优势最大化。
示例 1:
输入:A = [2,7,11,15], B = [1,10,4,11]
输出:[2,11,7,15]力扣https://leetcode-cn.com/problems/advantage-shuffle/2.解题
3.结果
四、救生艇1.题目
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
示例 1:
输入:people = [1,2], limit = 3
输出:1
解释:1 艘船载 (1, 2)力扣https://leetcode-cn.com/problems/boats-to-save-people/
2.题解
思路:先排序,然后头尾双指针 ,先看尾,能和头一船,ans++,然后头++(并标记已经上船了),尾-- 不能一船,ans++,尾--,头不变 一直到头大于尾
void swap(int*a,int*b){ int tmp=*a; *a=*b; *b=tmp; } int Partition(int a[],int l,int r){ int i,j,pivox; int idx=l+rand()%(r-l+1); pivox=a[idx]; i=j=l+1; swap(&a[l],&a[idx]); while(i<=r){ if(a[i]3.结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)