Java/Android中判断数组是否符合指定顺序的实现方法
判断数组是否完全匹配指定顺序的解决方案
嘿,很高兴你已经摸到了解决问题的门道!针对你提出的需求——判断cells数组是否完全精确匹配{1,2,3,...,15,0}这个特定顺序,我来帮你把逻辑优化得更清晰高效~
核心思路
我们的目标很明确:只要数组中有任意一个元素的位置和目标顺序不符,就返回false;只有当所有元素的位置都完全对应时,才返回true。
优化后的代码实现
相比你用计数器的思路,我们可以简化逻辑,直接逐一对比每个索引的元素,一旦发现不匹配就立刻终止判断,这样效率更高,代码也更易读:
public boolean matchesTargetOrder(int[] cells) { // 定义目标顺序的数组 int[] targetSequence = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0}; // 先校验数组长度,避免输入数组长度不符的情况 if (cells.length != targetSequence.length) { return false; } // 遍历每个索引,逐一对比元素 for (int i = 0; i < cells.length; i++) { if (cells[i] != targetSequence[i]) { // 只要有一个元素不匹配,直接返回false return false; } } // 所有元素都匹配,返回true return true; }
对原思路的补充说明
你原来用计数器统计正确元素数量的思路是可行的,但代码里有两处可以优化的地方:
- 不需要在循环内部判断
correct == cells.length——只有当所有元素都匹配时,这个条件才会成立,而此时循环已经遍历到最后一个元素,循环结束后再判断即可。 - 一旦发现元素不匹配就直接返回
false,不需要继续统计,这样能提前终止循环,提升效率。
比如修正后的计数器版本可以是这样:
public boolean matchesTargetOrder(int[] cells) { int[] targetSequence = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0}; if (cells.length != targetSequence.length) { return false; } int correctCount = 0; for (int i = 0; i < cells.length; i++) { if (cells[i] == targetSequence[i]) { correctCount++; } else { // 不匹配直接返回,不用继续统计 return false; } } // 遍历完成后,正确数量等于数组长度则返回true return correctCount == cells.length; }
两种方式都能实现需求,不过第一种直接对比的方式更简洁高效哦~
内容的提问来源于stack exchange,提问作者newstackhack
相关产品推荐
相关产品推荐

