Test scenario
I have taken the Two sum problem from Leetcode.
The problem statement:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
Only one valid answer exists.
Implementation
I have used a hash map to solve this problem across all three languages.
Python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hash_table = {}
for i, num in enumerate(nums):
target_num = target - num
if num in hash_table:
return i, hash_table[num]
else:
hash_table[target_num] = i
return None
Python stats
- Run time: 40ms
- Memory usage: 14.5 MB
Golang
func twoSum(nums []int, target int) []int {
hashMap := make(map[int] int)
for i := 0; i < len(nums); i++{
if _, found := hashMap[nums[i]]; found {
ans := []int{i, hashMap[nums[i]]}
return ans
} else {
hashMap[target- nums[i]]= i
}
}
return nil
}
Golang stats
- Run time: 4ms
- Memory usage: 4.3 MB
Rust
use std::collections::HashMap;
impl Solution {
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut hash_table: HashMap<i32, i32> = HashMap::new();
for i in 0..nums.len() {
// println!("Processing number: {}", nums[i]);
match hash_table.get(&nums[i]){
Some(&x) => return vec![x, i as i32],
None => hash_table.insert(target - nums[i], i as i32),
};
};
return vec![-1, -1]
}
}
Rust stats
- Run time: 2ms
- Memory usage: 2.2 MB
Conclusion
- As per the results, Rust took the least memory and was the fastest of all three.
For more such insights follow me on Twitter.
Original post: Hashnode