Find the 2nd largest element in an array with minimum number of comparisons

后端 未结 24 1130
清酒与你
清酒与你 2020-11-28 01:03

For an array of size N, what is the number of comparisons required?

相关标签:
24条回答
  • 2020-11-28 01:20
        int[] int_array = {4, 6, 2, 9, 1, 7, 4, 2, 9, 0, 3, 6, 1, 6, 8};
        int largst=int_array[0];
        int second=int_array[0];
        for (int i=0; i<int_array.length; i++){        
            if(int_array[i]>largst) { 
                second=largst;
                largst=int_array[i];
            }  
            else if(int_array[i]>second  &&  int_array[i]<largst) { 
                second=int_array[i];
            } 
        }
    
    0 讨论(0)
  • 2020-11-28 01:21

    Use counting sort and then find the second largest element, starting from index 0 towards the end. There should be at least 1 comparison, at most n-1 (when there's only one element!).

    0 讨论(0)
  • 2020-11-28 01:21
    package com.array.orderstatistics;
    
    import java.util.Arrays;
    import java.util.Collections;
    
    public class SecondLargestElement {
    
        /**
         *  Total Time Complexity will be n log n + O(1)
         * @param str
         */
        public static void main(String str[]) {
            Integer[] integerArr = new Integer[] { 5, 1, 2, 6, 4 };
    
    
    
            // Step1 : Time Complexity will be n log(n)
            Arrays.sort(integerArr, Collections.reverseOrder());
    
            // Step2 : Array.get Second largestElement
            int secondLargestElement = integerArr[1];
    
            System.out.println(secondLargestElement);
        }
    }
    
    0 讨论(0)
  • 2020-11-28 01:22

    Suppose provided array is inPutArray = [1,2,5,8,7,3] expected O/P -> 7 (second largest)

     take temp array 
          temp = [0,0], int dummmy=0;
        for (no in inPutArray) {
        if(temp[1]<no)
         temp[1] = no
         if(temp[0]<temp[1]){
        dummmy = temp[0]
        temp[0] = temp[1]
        temp[1] = temp
          }
        }
    
        print("Second largest no is %d",temp[1])
    
    0 讨论(0)
  • 2020-11-28 01:23

    I have gone through all the posts above but I am convinced that the implementation of the Tournament algorithm is the best approach. Let us consider the following algorithm posted by @Gumbo

    largest := numbers[0];
    secondLargest := null
    for i=1 to numbers.length-1 do
        number := numbers[i];
        if number > largest then
            secondLargest := largest;
            largest := number;
        else
            if number > secondLargest then
                secondLargest := number;
            end;
        end;
    end;
    

    It is very good in case we are going to find the second largest number in an array. It has (2n-1) number of comparisons. But what if you want to calculate the third largest number or some kth largest number. The above algorithm doesn't work. You got to another procedure.

    So, I believe tournament algorithm approach is the best and here is the link for that.

    0 讨论(0)
  • 2020-11-28 01:24
    class solution:
    def SecondLargestNumber (self,l):
        Largest = 0
        secondLargest = 0
        for i in l:
            if i> Largest:
                secondLargest = Largest
            Largest = max(Largest, i)
        return Largest, secondLargest
    
    0 讨论(0)
提交回复
热议问题