我们会说一个1后面紧跟一个3是一个不幸的"" 1.如果给定数组在数组的前2个或后2个位置包含不幸的1,则返回true。
可以在这里找到练习:
http://codingbat.com/prob/p197308
我自己的方法是这样的:
public boolean unlucky1(int[] nums) {
for (int i = 0; i < nums.length-1; i++) {
if (nums[i] == 1 && nums[i+1] == 3)
return true;
}
return false;
}
对于除[1,1,1,3,1]之外的每个数组都是如此。现在我明白为什么它不能用于这个数组,但为什么它适用于[2,1,3,4,5]呢?该数组在前两个或最后一个位置中没有1后跟3。我觉得这个练习错了吗?
答案 0 :(得分:1)
看起来你不遵守规则。您不需要遍历整个数组。您应该只测试前两个和后两个元素。
编辑:
再次阅读练习,似乎你应该返回true,即使1跟随3是在数组的索引1和2中(因为要求是不幸的1在前两个或最后两个位置 - 3不必在前两个位置。)
public boolean unlucky1(int[] nums) {
if (nums.length > 1) {
if (nums[0] == 1 && nums[1] == 3)
return true;
if (nums[nums.length-2] == 1 && nums[nums.length-1] == 3)
return true;
}
if (nums.length > 2 && nums[1] == 1 && nums[2] == 3) {
return true;
}
return false;
}
答案 1 :(得分:1)
问题定义是
前2个或后2个位置1
**[X,X,.......,X,X]**
\ / \ /
first last
2 2
positions positions
X
标记的位置是不幸1 所在的位置。
[2,1的 1 下,3,...,4,5]
[X,<强> X 下,.......,X,X]
不幸1 位于前两个元素中。
答案 2 :(得分:0)
例如:
if(nums.length<2){
return false;
}
for (int i = 0; i<2;i++) {
if(nums[i]==1&&nums[i+1]==3){
return true;
}
}
for (int i = nums.length-1; i>nums.length-2;i--) {
if(nums[i-1]==1&&nums[i]==3){
return true;
}
}
return false;
答案 3 :(得分:0)
public boolean unlucky1(int[] nums) {
if(nums.length>1){
if(nums[0]==1 && nums[1]==3) return true;
if(nums[1]==1 && nums[2]==3) return true;
if(nums[nums.length-2]==1 && nums[nums.length-1]==3) return true;
}
return false;
}
答案 4 :(得分:0)
我正在尝试使用尽可能少的代码行来解决CodingBat问题。让我使用三元运算符分享我对这些问题的解决方案。
AssertionError
答案 5 :(得分:0)
此代码可以正常工作:-
public boolean unlucky1(int[] nums) {
int length=nums.length;
if(nums.length==0||nums.length==1){
return false;
}
else if((nums[0]==1&&nums[1]==3)||(nums[1] ==1 && nums[2] ==3)||(nums[length-1]==3)&&nums[length-2]==1){
return true;
}
return false;
}