当前位置: 首页 > 知识库问答 >
问题:

编写一个函数来查找前两个最大数的索引

韩经武
2023-03-14

所以我在一次在线面试中被要求解决这个问题,但失败了。我立即被拒绝了。我正在试图找出我的算法出了什么问题。

两个最大的数字

用您选择的编程语言编写一个函数,该函数接受一个整数数组并返回前两个最大数字的索引。记录边缘情况下的任何特殊行为(如果有的话)。该函数的运行时间应为O(N)其中N是数组的长度和O(1)附加空间。

我编写了这个方法来对C#中的数字进行排序:

int[] sortArrayIndicies(int[] numbers)
{
   int high = int.MinValue;
   int secondHigh = int.MinValue;

   for(int i = 0; i < numbers.Length; i++)
   {
      if (numbers[i] > numbers[high])
      {
         secondHigh = high;
         high = i;
      }
      else if (numbers[i] > numbers[secondHigh])
      {
         secondHigh = i;
      }
   }

   return new[] {high, secondHigh};
}

关于记录边缘案例的特殊行为,我得到了以下回应:

对于数字为负数的情况,high和second high变量已初始化为min int value,而不是默认值零。复杂性为O(N)。

我哪里出错了?我知道时间复杂度是O(N),因为我在遍历整个列表,而空间复杂度是O(1),因为高和次高变量的空间量很小(固定)。

共有1个答案

贺运良
2023-03-14

注释是一种间接的方式,表示您的代码将因任何非空输入而崩溃,因为在初始迭代期间,数字[高]将相当于引用数字[int.MinValue]。

评论建议您将两个值初始化为0。我认为您可以更进一步,将值初始化为0110,具体取决于两个初始数字中的哪个更大。之后,您将开始从index2迭代。当然,您需要确保数组至少有两个元素。

程序应该考虑的另一种特殊情况是,当两个最大的数字彼此相等时,如{1,2,5,3,4,5,4,3}。在这种情况下,high和secondHigh都将具有相同的值,因此您的程序应该返回{2,5}

 类似资料:
  • 本文向大家介绍写一个函数找出给定数组中的最大差值相关面试题,主要包含被问及写一个函数找出给定数组中的最大差值时的应答技巧和注意事项,需要的朋友参考一下 function getMax(arr){ for(let i=arr[arr.length-1];i>0;i--){ for(let j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ let temp

  • 本文向大家介绍寻找一数组中前K个最大的数相关面试题,主要包含被问及寻找一数组中前K个最大的数时的应答技巧和注意事项,需要的朋友参考一下 考察点:数组    

  • 问题内容: 我无法完成这个问题。编写一个程序,该程序将搜索数组以查找第一个奇数。如果找到了奇数,则找到奇数之后的第一个偶数。返回第一个奇数和第一个偶数之间的距离。如果找不到奇数或奇数之后没有偶数,则返回-1。我试过这个问题,但我无法解决这是我的代码: 该代码的亚军 请帮助我完成此代码,并提供此代码给该运行程序提供的输出。我需要这个答案。我需要的正确输出。 问题答案: 我将嵌套一个循环,首先进行迭代

  • 问题内容: 如何在不使用模运算符的情况下找到将两个数相除的余数!我的老师给了我精确的练习,这只是我在编程基础课程中的第五次演讲。 我已经试过这个方程式 但是它总是返回零! 问题答案: 我刚试过 而且似乎可行。您的变量是什么类型?

  • 本文向大家介绍从一个数组中找出前4个最大的数,用最优解。相关面试题,主要包含被问及从一个数组中找出前4个最大的数,用最优解。时的应答技巧和注意事项,需要的朋友参考一下

  • 我无法完成这个问题。编写一个程序,搜索数组以找到第一个奇数。如果找到奇数,则找到奇数后的第一个偶数。返回第一个奇数和第一个偶数之间的距离。如果未找到奇数或奇数后没有偶数,则返回-1。我试过这个问题,但无法解决这是我的代码: 此代码的运行程序 请帮我完成这个代码,我给输出,这个代码给这个运行。我需要这个答案。我需要的正确输出。