CodeSignal问题中的neighborElementsProduct任务-Java

时间:2018-10-28 22:42:40

标签: java

我正在尝试解决2个小时。那是任务: 给定整数数组,找到具有最大乘积的相邻元素对并返回该乘积。

示例

对于inputArray = [3,6,-2,-5,7,3],输出应为 neighborElementsProduct(inputArray)= 21。

7和3产生最大的产品。

那是我的解决办法。

#include <stdio.h>

struct birthdate {
    int day;
    char month[9];
    int year;
};

typedef struct birthdate dob;
    struct info {
    char name[40];
    dob birthdate;
    int age;
    char sex[6];
    char *origin; 
};
void printinfo(struct info user) {
    printf("---- User Data ----\n");
    printf("Name: %s\n", user.name);
    printf("Date of birth: %d/%s/%d\n", user.birthdate.day, 
    user.birthdate.month, user.birthdate.year);
    printf("Age: %d\n", user.age);
    printf("Sex: %s\n", user.sex);
    printf("Country of origin: %s", user.origin);
}

int main() {
    printf("--Please enter your info--\n");
    struct info user;   
    printf("Please enter your name: ");
    scanf_s("%s", &user.name); // <-- exception thrown here
    printf("Please enter your date of birth in the format (dd/mm/yyyy): ");
    scanf_s("%d %s %d", &user.birthdate.day, &user.birthdate.month,
    &user.birthdate.year);
    printf("Please enter your age: ");
    scanf_s("%d", &user.age);
    printf("Please enter your gender ([M]ale/[F]emale): ");
    scanf_s("%s", &user.sex);
    printf("Please enter your country of origin: ");
    scanf_s("%s", &user.origin); // <- Another exception thrown here

    printf("\n\n");
    printinfo(user);

    printf("\nPress ENTER to continue..");
    getchar();
    return 0;
}

That's screen with errors

当然,我可以找到另一个(可能更短)的解决方案,但是我很好奇为什么我的系统无法正常工作。谢谢。

编辑:警告是因为我们从0开始而不是从1开始数组,所以在我的循环中它将是 inputArray.length-1 代替 inputArray.length 我还尝试了另一种解决方法,那就是我的2种解决方案:

int adjacentElementsProduct(int[] inputArray) {

    int[] tab = new int[29];
    int len = inputArray.length;

    for(int a = 0, int b = 1; a < len; a++, b++)
    {
        tab[a] = inputArray[a] * inputArray[b];
    }

    int max = -100;

    for(int i = 0; i < tab.length; i++)
    {
        if (tab[i] > max)
            max = tab[i];
    }

    return max;
}

第二个:

int adjacentElementsProduct(int[] inputArray) {

    int[] tab = new int[inputArray.length - 1];

    for(int a = 0; a < inputArray.length - 1; a++)
    {
        tab[a] = inputArray[a] * inputArray[a+1];
    }

    int max = -10000000;

    for(int i = 0; i < inputArray.length - 1; i++)
    {
        if (max < tab[i])
            max = tab[i];
    }

    return max;
}

但是感谢@ cricket_007和@AhmadWabbi的帮助:)

1 个答案:

答案 0 :(得分:-2)

Java单线解决方案,利用地图功能

int adjacentElementsProduct(int[] inputArray) {

    return IntStream.range(1, inputArray.length).map(i->inputArray[i]*inputArray[i-1]).max().getAsInt();

}

JavaScript一线解决方案

    function adjacentElementsProduct(inputArray) {        

        return Math.max(...arr.slice(1).map((x,i)=>[x*arr[i]]))

    }