CodingBat-Excercise:如果给定数组在数组

时间:2016-12-31 13:06:34

标签: java arrays

  

我们会说一个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。我觉得这个练习错了吗?

6 个答案:

答案 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;
}