javascript – 优化 – 获取数组中的第三大数字

前端之家收集整理的这篇文章主要介绍了javascript – 优化 – 获取数组中的第三大数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,我正在努力应对这一挑战,以返回数组中的第三大数字.我已经解决了,直到我意识到我必须考虑到重复的数字.我通过添加3层for变量i,j和k的for循环来处理这个问题.你会在代码中看到我的意思.这不是非常有效或可扩展.

我的问题是,如何优化此代码?我应该使用哪些其他方法

  1. function thirdGreatest (arr) {
  2. arr.sort(function(a,b) {
  3. if (a < b) {
  4. return 1;
  5. } else if (a > b) {
  6. return -1;
  7. } else {
  8. return 0;
  9. }
  10. });
  11.  
  12. for ( var i = 0; i < arr.length; i++) {
  13. for (var j = 1; j < arr.length; j++) {
  14. for (var k = 2; k < arr.length; k++) {
  15. if (arr[i] > arr[j]) {
  16. if (arr[j] > arr[k]) {
  17. return arr[k];
  18. }
  19.  
  20. }
  21. }
  22. }
  23. }
  24.  
  25.  
  26. }
  27.  
  28. console.log(thirdGreatest([5,3,23,7,2,5,10,24,31,31])); // 23
  29. console.log(thirdGreatest([5,31])) // 23
  30. console.log(thirdGreatest([5,4])); // 4
  31. console.log(thirdGreatest([2,4])); // 3

解决方法

既然你已经对数组进行了排序,那么看起来你应该很好地迭代列表并跟踪你已经看过的数字.当您看到三个不同的数字时,返回当前的数字:
  1. var seen = [arr[0]];
  2.  
  3. for (var i = 1; i < arr.length; i++) {
  4. if (arr[i] !== seen[0]) {
  5. if (seen.length === 2) {
  6. return arr[i];
  7. }
  8. seen.unshift(arr[i]);
  9. }
  10. }
  1. function thirdGreatest (arr) {
  2. arr.sort(function(a,b) {
  3. return b - a;
  4. });
  5.  
  6. var seen = [arr[0]];
  7. for (var i = 1; i < arr.length; i++) {
  8. if (arr[i] !== seen[0]) {
  9. if (seen.length === 2) {
  10. return arr[i];
  11. }
  12. seen.unshift(arr[i]);
  13. }
  14. }
  15. }
  16.  
  17. console.log(thirdGreatest([5,4])); // 3

注意:您可以简化排序回调

  1. arr.sort(function(a,b) {
  2. return b - a;
  3. });
  4. // With arrow functions:
  5. // arr.sort((a,b) => b - a);

回调必须返回一个更大,更小或等于0的数字,它不必完全是-1或1.

猜你在找的JavaScript相关文章