while循环不断超时,无法找出原因(Hackerrank问题)

时间:2019-08-13 12:55:39

标签: javascript loops while-loop

我在Hackerrank上执行了repeaterString问题,并且我的代码无法解决所有情况。我的代码似乎正确,但是在使用大整数

时会超时

我尝试使用不同的for循环,但似乎无法弄清楚,我对编码有些陌生。我试图做一个if语句,说s等于'a'然后计数等于n,但这无助于它通过所有测试用例。我非常确定,如果您需要查看它,可以在Google搜索出repeatedStr问题。

根据我输入的代码,我希望计数等于n。

variables:
  REGION: us-east-1
  S3_BUCKET_NAME: my-bucket

stages:
 - build
 - push
 - deploy

build-package:
  stage: build
  script:
    - some code to produce a deployment package called function.zip
  artifacts:
    name: deployment_package
    paths:
      - function.zip


push-code:
  stage: push
  script:
    - aws s3 cp function.zip s3://$S3_BUCKET_NAME/$CI_COMMIT_SHA.zip

deploy-trigger-stack:
  stage: deploy
  script: 
      - aws cloudformation deploy
            --template-file stack-template.yaml
            --stack-name my-stack
            --region $REGION
            --no-fail-on-empty-changeset
            --capabilities CAPABILITY_NAMED_IAM
            --parameter-overrides
            ciCommitSha=$CI_COMMIT_SHA
            s3Bucket=$S3_BUCKET_NAME

1 个答案:

答案 0 :(得分:0)

我想这就是挑战:https://www.hackerrank.com/challenges/repeated-string/problem

主要问题是while循环和for循环。

while循环正在检查string.length <= n,而for循环正在检查i < n并增加n。

for循环将在i = n时中断,因此在subStr.length == n时中断。但是,while条件不会中断,因为 substr.length仍等于n

我建议将所有内容都放在一个循环中,因为while或for都是多余的(您只需要一个循环)。

// replace the while and for loop with this
let i = 0
while (subStr.length <= n) {
    let element = s[i]
    if (element) {
        subStr += element
    }
    i++;
}

最后,关于如何优化此问题的另一条评论:您可以将这个问题视为除法解决方案,或者可以将给定长度的字符串输入多少次,而不是构建整个字符串列表和计数。您知道您的字符串中有X次字母。 如果您知道可以输入字符串长度Y的长度的a倍,则只需执行X * Y即可获得字符串中if (element)的数目。当然,您将不得不使用除法的其余部分,因为在长度中输入的项目数不是输入数,而是小数


我也无法添加评论,但是

  1. 该问题被标记为javascript和
  2. element是一个断言,用于验证{{1}}是否未定义,在JS中访问边界数组时就是这种情况。