题目
给你一个下标从 0 开始的非负整数数组
nums
。对于nums
中每一个整数,你必须找到对应元素的 第二大 整数。如果
nums[j]
满足以下条件,那么我们称它为nums[i]
的 第二大 整数:
j > i
nums[j] > nums[i]
- 恰好存在 一个
k
满足i < k < j
且nums[k] > nums[i]
。如果不存在
nums[j]
,那么第二大整数为-1
。
- 比方说,数组
[1, 2, 4, 3]
中,1
的第二大整数是4
,2
的第二大整数是3
,3
和4
的第二大整数是-1
。请你返回一个整数数组
answer
,其中answer[i]
是nums[i]
的第二大整数。
解题思路
- 最后两个一定为-1,因为右侧不足两个,不存在第二大整数;
- 倒序遍历,可以利用重复数据;
- 分情况讨乱,利用重复数据进行赋值。
代码展示
class Solution { public int[] secondGreaterElement(int[] nums) { int n = nums.length; int[] ans = new int[n]; Arrays.fill(ans,-1); for (int i = n - 3; i >= 0; i--){ int flag = 0; for (int j = i + 1; j < n; j++){ if(nums[j] > nums[i]){ if(++flag == 2){ ans[i] = nums[j]; break; } } else if (nums[j] == nums[i]){ if(flag == 0){ ans[i] = ans[j]; break; } } else { if(ans[j] == -1 && flag == 0){ break; } } } } return ans; } }