В этой статье будут продемонстрированы память и время выполнения, используемые 15 различными языками программирования для решения игры в делители в Leetcode. Я также указал причины высокого или низкого времени выполнения и использования памяти.

Языки программирования

C
C++
C#
Java
Python
JavaScript
TypeScript
PHP
Kotlin
Swift
Rust
Go
Scala
Dart
Ruby

Осторожно, спойлеры

Постановка задачи

Алиса и Боб по очереди играют в игру, причем Алиса начинает первой.

Изначально на доске нарисована цифра n. В свой ход каждый игрок делает ход, состоящий из:

  • Выбор любого x с помощью 0 < x < n и n % x == 0.
  • Замена цифры n на доске на n - x.

Кроме того, если игрок не может сделать ход, он проигрывает игру.

Верните true тогда и только если Алиса выиграет игру, предполагая, что оба игрока играют оптимально.

Решение

Если n четное, верните True иначе False

Код

/* C */
bool divisorGame(int n){
    if(n%2==0) {
        return true;
    }
    else {
        return false;
    }
}
// C++
class Solution {
public:
    bool divisorGame(int n) {
        if(n%2==0) {
            return true;
        } else {
            return false;
        }
    }
};
// C#
public class Solution {
    public bool DivisorGame(int n) {
        return n%2==0;
    }
}
// Java
class Solution {
    public boolean divisorGame(int n) {
        if(n%2==0) {
            return true;
        }
        else {
            return false;
        }
    }
}
# Python
class Solution:
    def divisorGame(self, n: int) -> bool:
        return n%2==0
// JavaScript
var divisorGame = function(n) {
    return n%2==0
};
// TypeScript
function divisorGame(n: number): boolean {
    return n%2==0;
};
// PHP
class Solution {
    function divisorGame($n) {
        return $n%2==0;
    }
}
// Kotlin
class Solution {
    fun divisorGame(n: Int): Boolean {
        return n%2==0;
    }
}
// Swift
class Solution {
    func divisorGame(_ n: Int) -> Bool {
        return n%2==0;
    }
}
// Rust
impl Solution {
    pub fn divisor_game(n: i32) -> bool {
        n%2==0
    }
}
// Go
func divisorGame(n int) bool {
    return n%2==0
}
// Scala
object Solution {
    def divisorGame(n: Int): Boolean = {
        return n%2==0
    }
}
// Dart
class Solution {
  bool divisorGame(int n) {
    return n%2==0;
  }
}
# Ruby
def divisor_game(n)
    return n%2==0
end

Производительность

Причины

C и C++ являются компилируемыми языками, т. е. их исходный код транслируется в машинный код во время компиляции. Это может привести к более быстрому выполнению по сравнению с интерпретируемыми языками.

Rust — это компилируемый язык. Его конструкция призвана обеспечить низкоуровневый контроль C и C++, а также обеспечить абстракции высокого уровня и гарантии безопасности. Это может привести к повышению производительности во время выполнения и низкому использованию памяти.

Java, C# и Kotlin компилируются в промежуточный байт-код, который затем выполняется виртуальной машиной. Это может привести к замедлению времени работы. Java компилируется быстрее, чем C# и Kotlin, из-за меньшего количества функций. Эти языки также имеют автоматическое управление памятью, что может привести к более интенсивному использованию памяти.

Python, Ruby, PHP и JavaScript являются интерпретируемыми языками, а это означает, что их исходный код декодируется во время выполнения при каждом запуске оператора. Это может привести к снижению производительности во время выполнения по сравнению с скомпилированными языками. Эти языки также имеют автоматическое управление памятью, что может привести к более высокому использованию памяти по сравнению с языками без автоматического управления памятью.

Go — это компилируемый язык, ориентированный на простоту и параллелизм. Его конструкция направлена ​​на обеспечение быстрого времени компиляции и эффективного выполнения.

Swift – это компилируемый язык, в котором особое внимание уделяется безопасности и выразительности. Его конструкция направлена ​​на обеспечение высокой производительности во время выполнения, а также простоту чтения и записи. Swift также имеет автоматическое управление памятью, что может привести к более высокому использованию памяти по сравнению с языками без автоматического управления памятью.

TypeScript — это строгая синтаксическая расширенная версия JavaScript, в которую добавляются необязательные аннотации типов. Код TypeScript транслируется в JavaScript, который затем выполняется движком JavaScript. Это означает, что производительность выполнения и использование памяти TypeScript аналогичны показателям JavaScript.

Конец