В этой статье будут продемонстрированы память и время выполнения, используемые 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.
Конец