领扣LintCode算法问题答案-1823. 数组的最长前缀
目录
1823. 数组的最长前缀描述样例 1:样例 2:样例 3:
题解鸣谢
1823. 数组的最长前缀
描述
给定两个正整数X和Y,以及正整数数组nums。 我们需要找到一个最大的index,使得在nums[0], nums[1], … , nums[index]中,出现X、Y的次数相等,且至少均出现一次,返回该index。 若不存在这样的index,则返回-1。
nums 的数组长度范围是: [0, 1000000]nums[i], X 以及 Y 的整数范围是: [1, 1 000000]
样例 1:
输入:
X = 2
Y = 4
nums: [1, 2, 3, 4, 4, 3]
输出: 3
解释: 保证 2 和 4 出现相同次数的最长前缀是: {1, 2, 3, 4},所以你应该返回3。
样例 2:
输入:
X = 7
Y = 42
nums = [7、42、5、6、42、8、7、5、3、6、7]
输出:9
解释:保证7和42出现相同次数的最长前缀是:{7, 42, 5, 6, 42, 8, 7, 5, 3, 6},所以你应该返回9。
样例 3:
输入:
X = 1
Y = 10
nums: [2, 3, 1]
输出:-1
解释:不存在前缀使得 1 和 10 都出现且出现次数相同的情况
题解
public class Solution {
public int LongestPrefix(int X
, int Y
, int[] nums
) {
int ret
= -1;
int xCount
= 0;
int yCount
= 0;
for (int i
= 0; i
< nums
.length
; i
++) {
int n
= nums
[i
];
if (n
== X
) {
xCount
++;
} else if (n
== Y
) {
yCount
++;
}
}
for (int i
= nums
.length
- 1; i
>= 0; i
--) {
if (xCount
== yCount
) {
if (xCount
> 0) {
ret
= i
;
}
break;
}
int n
= nums
[i
];
if (n
== X
) {
xCount
--;
} else if (n
== Y
) {
yCount
--;
}
}
return ret
;
}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。