在数组中查找领导者
问题:
我们需要打印阵列中存在的所有领导者。如果元素大于元素的右侧,则它是领导者。
例如:
1 2 3 4 |
rr[]={14, 12, 70, 15, 99, 65, 21, 90} 这里 99 和 90 是 领导 元素 |
解:
解决方案1:
使用两个循环。外循环遍历数组元素,而内循环则检查数组的正确元素。如果当前元素大于正确元素,则为领导者。
爪哇代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
上市 静态的 虚空 findLeadersInAnArrayBruteForce(整型 rr[]) { 系统.出.打印(“使用蛮力寻找领导者:”); 对于 (整型 i = 0; i < rr.长度; i++) { 布尔值 isLeader=真正; 对于 (整型 j = i+1; j < rr.长度; j++) { 如果(rr[i] <= rr[j]) { isLeader=假; 打破; } } 如果(isLeader) 系统.出.打印(rr[i]+”); } } |
时间复杂度:o(N ^ 2)
解决方案2:
让我们找到更多优化的解决方案
我们将使用最右边的元素始终是领导者的属性。
- 我们将从最右边的元素开始并跟踪最大值。
- 每当我们获得新的最大值时,该元素就是领导者。
爪哇代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
上市 静态的 虚空 findLeadersInAnArray(整型 rr[]) { 系统.出.打印(“寻找领导者:”); 整型 rightMax=rr[rr.长度-1]; //最右边永远是领导者 系统.出.打印(rightMax+”); 对于 (整型 i = rr.长度-2; i>=0; i-) { 如果(rr[i] > rightMax) { rightMax=rr[i]; 系统.出.打印(”+rightMax); } } } |
时间复杂度:o(N)
爪哇程序在数组中查找领导者:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
包 组织.Arpit.爪哇2blog; 上市 类 FindLeadersInArrayMain { 上市 静态的 虚空 主要(串[] args) { 整型 rr[]={14, 12, 70, 15, 99, 65, 21, 90}; findLeadersInAnArrayBruteForce(rr); 系统.出.打印(“ n ==================”); findLeadersInAnArray(rr); } 上市 静态的 虚空 findLeadersInAnArrayBruteForce(整型 rr[]) { 系统.出.打印(“使用蛮力寻找领导者:”); 对于 (整型 i = 0; i < rr.长度; i++) { 布尔值 isLeader=真正; 对于 (整型 j = i+1; j < rr.长度; j++) { 如果(rr[i] <= rr[j]) { isLeader=假; 打破; } } 如果(isLeader) 系统.出.打印(rr[i]+”); } } 上市 静态的 虚空 findLeadersInAnArray(整型 rr[]) { 系统.出.打印(“寻找领导者:”); 整型 rightMax=rr[rr.长度-1]; //最右边永远是领导者 系统.出.打印(rightMax+”); 对于 (整型 i = rr.长度-2; i>=0; i-) { 如果(rr[i] > rightMax) { rightMax=rr[i]; 系统.出.打印(”+rightMax); } } } } |
当您运行上述程序时,将获得以下输出:
1 2 3 4 5 6 7 |
寻找 领导者 在 一个 数组 使用 蛮力 力 99 90 ================== 寻找 领导者 在 一个 数组 : 90 99 |