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

LC1491.去掉最低工资和最高工资后的工资平均值

【用本题复习一下408的各种内部排序算法】
【先发出来,后续补充各种】

文章目录

  • 直接插入排序
    • 知识点复习

直接插入排序

呃呃呃 一开始…平均值忘了分母是size-2

还有j应该是>0,一开始的时候写的是>=0,错的

临界条件就是:
比如 2357891
扫描到1的时候
1记录为temp
i是1的下标
j=i
然后往前看
每一个都比1大,要往后移动一个
最后判断的是salary0>temp(1)
这个时候j是1,j也只需要是1
因为j代表的是
若j-1往后移动之后的下标

纠正后的代码

double average(int* salary, int salarySize) {int i, j, temp;// 插入排序for (i = 1; i < salarySize; i++) {temp = salary[i];for (j = i; j > 0 && salary[j - 1] > temp; j--) {salary[j] = salary[j - 1];}salary[j] = temp;}// 计算去掉最高和最低工资后的平均值double sum = 0;for (i = 1; i < salarySize - 1; i++) {sum += salary[i];}double avg = sum / (salarySize - 2);return avg;
}

力扣有了这个功能诶
在这里插入图片描述

知识点复习

最好情况
外循环是要执行的


但是这个内循环不需要进去,所以是O(n),本题n是salarySize

平均

在平均情况下,数组元素是随机排列的。每次插入时,当前元素在已经排序部分的平均插入位置大约在中间。因此,内层循环在第i次插入时平均执行i/2次比较。

外层循环执行n-1次。
内层循环在第i次插入时平均执行i/2次比较。
总的比较次数为:
[ T avg ( n ) = ∑ i = 1 n − 1 i 2 = 1 2 ∑ i = 1 n − 1 i = 1 2 ⋅ ( n − 1 ) n 2 = ( n − 1 ) n 4 ] [ T_{\text{avg}}(n) = \sum_{i=1}^{n-1} \frac{i}{2} = \frac{1}{2} \sum_{i=1}^{n-1} i = \frac{1}{2} \cdot \frac{(n-1)n}{2} = \frac{(n-1)n}{4} ] [Tavg(n)=i=1n12i=21i=1n1i=212(n1)n=4(n1)n]

因此,平均情况下的时间复杂度为: O ( n 2 ) O(n^2) O(n2)

在最坏情况下,数组是逆序的。每次插入时,都需要将所有已经排序的元素向后移动一位。

外层循环执行n-1次。
内层循环在第i次插入时执行i次比较。
总的比较次数为: [ T worst ( n ) = ∑ i = 1 n − 1 i = ( n − 1 ) n 2 ] [ T_{\text{worst}}(n) = \sum_{i=1}^{n-1} i = \frac{(n-1)n}{2} ] [Tworst(n)=i=1n1i=2(n1)n]

因此,最坏情况下的时间复杂度为: [ O(n^2) ]


http://www.mrgr.cn/news/53468.html

相关文章:

  • 【MySQL】提高篇—索引与性能优化:索引的概念与类型(单列索引、复合索引、全文索引)
  • 布隆过滤器
  • [MySQL课后作业]人事管理系统的SQL实践
  • 【C++】哈希的应用——位图
  • 三菱PLC如何实现数据排序的分析?
  • stm32通过串口读取JY61 JY62数据(HAL库)
  • 代码随想录算法训练营第二天(补) | 滑动窗口、模拟、前缀和
  • QExcel 保存数据 (QtXlsxWriter库)
  • Redis2
  • Scala的sortedWith
  • Java集合常见知识总结(中)
  • 从开发板传送文件回本地
  • 【在Linux世界中追寻伟大的One Piece】应用层自定义协议|序列化
  • 19.面试算法-树的深度优先遍(一)
  • 008、相交链表
  • (01)fastapi的基础学习——开启学习之路
  • JavaScript (基础)
  • 【力扣打卡系列】滑动窗口与双指针(两数之和)
  • 优化漏洞扫描流程以保障企业数字化业务安全
  • 【AI学习】Mamba学习(八):HiPPO通用框架定义和方法