JS題解leetcode去掉最低工資和最高工資后的工資平均值
題目
- 給你一個整數(shù)數(shù)組
salary
,數(shù)組里每個數(shù)都是 唯一 的,其中salary[i]
是第i
個員工的工資。 - 請你返回去掉最低工資和最高工資以后,剩下員工工資的平均值。
示例
示例 1:
輸入: salary = [4000,3000,1000,2000]
輸出: 2500.00000
解釋: 最低工資和最高工資分別是 1000 和 4000 。去掉最低工資和最高工資以后的平均工資是 (2000+3000)/2= 2500
示例 2:
輸入: salary = [1000,2000,3000]
輸出: 2000.00000
解釋: 最低工資和最高工資分別是 1000 和 3000 。去掉最低工資和最高工資以后的平均工資是 (2000)/1= 2000
示例 3:
輸入: salary = [6000,5000,4000,3000,2000,1000]
輸出: 3500.00000
示例 4:
輸入: salary = [8000,9000,2000,3000,6000,1000]
輸出: 4750.00000
提示
3 <= salary.length <= 100
10^3 <= salary[i] <= 10^6
salary[i]
是唯一的。- 與真實值誤差在
10^-5
以內(nèi)的結(jié)果都將視為正確答案。
代碼
function average(salary: number[]): number { let sortSalary = salary.sort((a, b) => { return a - b; }); let sum = 0; for(let i = 1; i < sortSalary.length - 1; i++){ sum += sortSalary[i]; } return sum / (sortSalary.length - 2); };
- 首先將原數(shù)組排序,這樣排序后的新數(shù)組會將最大值和最小值放在數(shù)組的第一位和最后一位
- 遍歷新數(shù)組,因為要排除最大值和最小值,所以范圍從數(shù)組的第二位到倒數(shù)第二位,將每一項的值進行累加
- 將累加和除以總共累計的項數(shù)返回(總項數(shù)是數(shù)組的長度,排除首尾兩項,累加項數(shù)為總長度減去
2
) - 采用先排序后遍歷累加的方法,時間復雜度較高,因為排序也消耗時間
function average(salary: number[]): number { let max = Math.max(...salary); let min = Math.min(...salary); salary.splice(salary.indexOf(max), 1); salary.splice(salary.indexOf(min), 1); let sum = salary.reduce((next, pre) => { return next + pre }, 0) return sum / salary.length };
優(yōu)化版:
- 先利用
Math.max
和Math.min
將數(shù)組的最大值和最小值找到 - 然后利用數(shù)組方法
splice
將最大值和最小值從原數(shù)組中刪除(splice方法改變原數(shù)組的長度
) - 最后使用數(shù)組的
reduce
方法將數(shù)組求和 - 最后將刪除最大值和最小值的數(shù)組和除以數(shù)組長度,得到平均值返回
- 時間消耗和上面差不太多,內(nèi)存消耗比上面少一些
以上就是JS題解leetcode去掉最低工資和最高工資后的工資平均值的詳細內(nèi)容,更多關于JS題解leetcode工資平均值的資料請關注腳本之家其它相關文章!
相關文章
js實現(xiàn)首屏延遲加載實現(xiàn)方法 js實現(xiàn)多屏單張圖片延遲加載效果
這篇文章主要介紹了js實現(xiàn)首屏延遲加載實現(xiàn)方法,以及js實現(xiàn)多屏單張圖片延遲加載效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07