我试图从leetcode中解决“游戏中弱字符的数量”。对问题的描述:
您正在玩一个包含多个字符的游戏,每个字符都有两个主要属性:攻击和防御。您将获得一个2D整数数组属性,在该属性中,propertiesi =攻击i,国防i表示游戏中ith字符的属性。
如果任何其他角色的攻击和防御等级都严格大于该角色的攻击和防御级别,则称该角色为弱角色。更正式地说,如果存在另一个字符j,攻击j>攻击和防御j> defensei,则称I是弱字符。
返回弱字符数。
例1:输入: properties = [5,5,6,3,3,6]输出:0解释:没有一个字符具有比其他字符更强的攻击和防御能力。
经过几个小时的尝试,我成功地创建了这个解决方案:
public static int numberOfWeakCharacters(int[][] properties) {
if (properties.length == 0) {
return 0;
}
int counter = 0;
for (int i =0; i<properties.length; i++) {
for (int j = 0; j<properties.length; j++) {
int localCounter = 0;
int firstValue = properties[j][0];
int value = properties[j][1];
if ((properties[i][0] < firstValue && properties[i][1] < value) ) {
counter++;
if (i+1 == properties.length) {
break;
}
i++;
j=0;
}
}
}
return counter;
}但问题是。当调用if条件时,语句j = 0;无法工作。根据查找元素后的逻辑,即比当前值更强大的元素,我会增加i以跳到下一个元素上。有趣的是,j应该从一开始就开始,但是它从第一个索引开始。
有什么办法解决这个问题吗?
请不要建议任何其他解决这个问题的方法。我只是在寻找修复我自己实现的方法。
发布于 2022-08-14 12:25:15
我认为,如果您替换了以下代码,您的代码就会正常工作:
if (i+1 == properties.length) {
break;
}
i++;
j=0;一个break;语句。
内环(j变量)用于查找更强大的元素。如果您找到更强大的元素,您希望退出循环,因为您只需要找到一个这样的元素。当i变量增加一个时,外部循环将检查下一个元素。
您也不需要检查这个:if (i+1 == properties.length),因为您的外部循环检查这个条件:i<properties.length。因此,i不能比properties.length大。
https://stackoverflow.com/questions/73351461
复制相似问题