领扣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
;
    }
}
 
原题链接点这里
 
鸣谢
 
 
 非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。