【发布时间】:2016-11-20 05:58:07
【问题描述】:
我在codingbat.com上遇到了这个问题:Problem
问题:
给定一个整数数组,如果该数组包含两个相邻的 7,或者两个 7 被一个元素隔开,例如 {7, 1, 7},则返回 true。
has77([1, 7, 7]) → 真
has77([1, 7, 1, 7]) → 真
has77([1, 7, 1, 1, 7]) → 假
我解决了它,但我的方法不是那么有效。与问题相比,我的解决方案的代码很大。谁能告诉我如何以聪明的方式解决这个问题。
我的代码:
public boolean has77(int[] nums) {
int i = 0;
int arraylength = 0;
while(i != nums.length){
if(nums[i] == 7){
arraylength++;
}
i++;
}
int[] sevens = new int[arraylength];
if(arraylength == 0){
return false;
}
i =0;
int j = 0;
while(i != nums.length){
if(nums[i] == 7){
sevens[j] = i;
j++;
}
i++;
}
i = 0;
while(i != arraylength-1){
if(sevens[i+1] - sevens[i]==1 || (sevens[i+1]- sevens[i]==2)){
return true;
}
i++;
}
return false;
}
【问题讨论】:
-
有效吗?只对数组进行一次迭代。如果当前元素是 7,并且前一个元素或之前的元素也是 7,则返回 true。
-
在:投反对票的人,最好解释一下投反对票的原因,以便我下次注意。只是一个请求!
-
我不是反对者,但您不应该只提供链接。链接可能不起作用,因此请始终在您的问题中包含相关部分。您仍然可以提供链接以供完整参考。
-
@Andreas 你能把代码贴出来吗?
-
不,但我确实转发了我的评论作为答案。