1250. Check If It Is a Good Array

LeetCode hard оригинал: C# #array #csharp #hard #hash-table #leetcode #math

Дан массив nums из целых положительных чисел. Ваша задача - выбрать некоторое подмножество nums, умножить каждый элемент на целое число и сложить все эти числа.Массив считается хорошим, если из него можно получить сумму, равную 1, при любом возможном подмножестве и множителе. Верните True, если массив хороший, иначе верните False.

Пример:

Input: nums = [12,5,7,23]

Output: true

C# решение

сопоставлено/оригинал
public class Solution {
    public bool IsGoodArray(int[] nums) {
        int gcd = nums[0];
        foreach (int num in nums) {
            gcd = Gcd(gcd, num);
            if (gcd == 1) return true;
        }
        return gcd == 1;
    }
    private int Gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
}

C++ решение

auto-draft, проверить перед отправкой
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public bool IsGoodArray(vector<int>& nums) {
        int gcd = nums[0];
        foreach (int num in nums) {
            gcd = Gcd(gcd, num);
            if (gcd == 1) return true;
        }
        return gcd == 1;
    }
    private int Gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
}

Java решение

сопоставлено/оригинал
import java.util.Arrays;

public class Solution {
    public boolean isGoodArray(int[] nums) {
        int gcd = nums[0];
        for (int num : nums) {
            gcd = gcd(gcd, num);
            if (gcd == 1) return true;
        }
        return gcd == 1;
    }

    private int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
}

JavaScript решение

сопоставлено/оригинал
var isGoodArray = function(nums) {
    let gcd = nums[0];
    for (let num of nums) {
        gcd = gcdFunc(gcd, num);
        if (gcd === 1) return true;
    }
    return gcd === 1;
};

function gcdFunc(a, b) {
    while (b !== 0) {
        let temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

Python решение

сопоставлено/оригинал
import math
from functools import reduce

def isGoodArray(nums):
    return reduce(math.gcd, nums) == 1

Go решение

сопоставлено/оригинал
func isGoodArray(nums []int) bool {
    gcd := nums[0]
    for _, num := range nums {
        gcd = gcdFunc(gcd, num)
        if gcd == 1 {
            return true
        }
    }
    return gcd == 1
}

func gcdFunc(a, b int) int {
    for b != 0 {
        a, b = b, a % b
    }
    return a
}

Algorithm

Если наибольший общий делитель (НОД) всех чисел в массиве равен 1, то массив считается хорошим.

Если НОД всех чисел больше 1, то массив не считается хорошим

Получить сумму, равную 1, умножая и складывая элементы.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.