领扣LintCode算法问题答案-1823. 数组的最长前缀

    科技2022-08-05  108

    领扣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 { /** * @param X: a integer * @param Y: a integer * @param nums: a list of integer * @return: return the maximum index of largest prefix */ public int LongestPrefix(int X, int Y, int[] nums) { // write your code here 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; } }

    原题链接点这里

    鸣谢

    非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

    Processed: 0.009, SQL: 8