繁体   English   中英

CodingBat-Excercise:如果给定数组在数组的前 2 位或后 2 位包含不吉利的 1,则返回 true

[英]CodingBat-Excercise: Return true if the given array contains an unlucky 1 in the first 2 or last 2 positions in the array

我们会说数组中紧跟 3 的 1 是“不吉利的”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。 我把这个练习弄错了吗?

看起来你没有遵守规则。 您不需要遍历整个数组。 您应该只测试前两个和最后两个元素。

编辑 :

再次阅读练习,即使后面的 1 和 3 在数组的索引 1 和 2 中,您似乎也应该返回 true (因为要求不幸的 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;
}

问题定义是

前 2 位或后 2 位中的 1

**[X,X,.......,X,X]**
   \ /         \ /
  first        last
    2           2
positions    positions 

X标记的位置是倒霉1可以定位的位置。

[2, 1,3 ,.....,4,5]

[X, X ,.......,X,X]

倒霉的 1在前两个元素中。

例如 :

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

我正在尝试用尽可能少的代码行来解决那些 CodingBat 问题。 让我分享一下我使用三元运算符解决这个问题的方法。

public boolean unlucky1(int[] nums) {
      return nums.length <= 1 ? false : (nums.length == 2 && nums[0] == 1 && nums[1] == 3) ? true 
              : (nums[0] == 1 && nums[1] ==3) ? true : (nums[1] == 1 && nums[2] ==3) 
                      ? true : (nums[nums.length-2] == 1 && nums[nums.length-1] ==3);
}

此代码工作正常: -

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

我的解决方案通过了所有测试:

public boolean unlucky1(int[] nums) {
  
  if (nums.length == 2 && nums[0] == 1 && nums[1] == 3) {
    return true;
  }
  
  if (nums.length >= 3) {
    for (int i = 0; i < 2; i++) {
      if (nums[i] == 1 && nums[i+1] == 3) {
        return true;
      }
      
      if (nums[nums.length - 2] == 1 && nums[nums.length - 1] == 3) {
        return true;
      }
    }
  }
  
  
  return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM