Right Dominant Elements问题

求解Right Dominant Elements问题

针对下面两种情况,设计求解Right Dominant Elements的算法(一个序列中某元素比它的后面所有的数都大的元素即为Right Dominant Element),并分析算法的复杂度。

例L=(10,9,5,13,2,7,1,8,4,6,3),答案为(13,8,6,3)。

情况一:一次性给定n个数据。
情况二:数据序列在线给定(数据不是一次性给定,而是边输入边求解)。

 

情况一

方法1:Simple

Time Complexity: O(n*n)

 1 #include <stdio.h>
 2 #include <string.h>
 3 int RightDominantElement(const char array[], const int ArrayLength);
 4 
 5 int main(int argc, const char *argv[])
 6 {
 7     char a[1000] = {10,9,5,13,2,7,1,8,4,6,3,};            //一次性输入数据,共有11个有效数据 
 8     int   n      = strlen(a);                            //此时    n = 11 
 9     RightDominantElement(a,n);    
10     return 0;
11 } 
12 
13 int RightDominantElement(const char array[], const int ArrayLength)
14 {
15     int i, j;
16     for(i=0; i<ArrayLength; i++)
17     {
18         for(j=i+1; j<ArrayLength; j++)
19         {
20             if(array[i] <= array[j])        //若array[i]后面有更大的数,该轮冒泡查找结束。开始下一轮冒泡。 
21                 break;
22         }
23         if(j == ArrayLength)                //此时内层循环正常结束,未触发break语句,即array[i]后面没有更大的数。 
24             printf("%d,",array[i]);
25     }
26     printf("\b \n");                        //去掉最后一位的逗号, 
27 }

 

方法2:Scan from right

Time Complexity: O(n)

30 #include <stdio.h>
31 void RightDominantElement(int array[], int Length);
32 int main(int argc, const char *argv[])
33 {
34     int a[] = {10,9,5,13,2,7,1,8,4,6,};    //一次性输入数据,共有11个有效数据
35     int n   = sizeof(a)/sizeof(a[0]);        //此时    n = 11 
36     RightDominantElement(a,n);
37     return 0;
38 }
39 
40 void RightDominantElement(int array[], int Length)
41 {
42     int largest_index = Length-1;        // 数组最大下标 = 数组长度 - 1 
43     int max_from_right = array[largest_index];    //设置从右数的第一个数为Right Dominant Element
44     printf("%d ",max_from_right);
45     for (int i=largest_index-1; i>=0; i--)        /*从右到左扫描数组中的所有元素,并一直跟踪到现在为止的最大值。 当最大值更改其值时,将其打印。*/ 
46     {
47         if(max_from_right < array[i])
48         {
49             max_from_right = array[i];
50             printf("%d ",max_from_right);
51         }
52     }
53 }

 

 

 

posted @ 2020-02-23 17:53  3月の狮子  阅读(537)  评论(0编辑  收藏  举报