I am a python dev learning java and Go at the same time.
I am learning them by solving leetcode. I am surprised that Go always have higher runtime than java sometimes in the order of 5-7x. I want to know if I am doing something wrong or is it an issue with leetcode compiler or it’s a golang issue?
https://leetcode.com/problems/daily-temperatures/
Go:
<code>func dailyTemperatures(temperatures []int) []int {
answers := make([]int, len(temperatures))
stack := make([]int, 0, len(temperatures))
for i int = 0; i < len(temperatures) ; i++ {
temp int = temperatures[i]
for len(stack) != 0 && temperatures[stack[len(stack)-1]] < temp {
answers[stack[len(stack)-1]] = i - stack[len(stack)-1]
stack = stack[:len(stack)-1]
}
stack = append(stack, idx)
}
return answers
}
</code>
<code>func dailyTemperatures(temperatures []int) []int {
answers := make([]int, len(temperatures))
stack := make([]int, 0, len(temperatures))
for i int = 0; i < len(temperatures) ; i++ {
temp int = temperatures[i]
for len(stack) != 0 && temperatures[stack[len(stack)-1]] < temp {
answers[stack[len(stack)-1]] = i - stack[len(stack)-1]
stack = stack[:len(stack)-1]
}
stack = append(stack, idx)
}
return answers
}
</code>
func dailyTemperatures(temperatures []int) []int {
answers := make([]int, len(temperatures))
stack := make([]int, 0, len(temperatures))
for i int = 0; i < len(temperatures) ; i++ {
temp int = temperatures[i]
for len(stack) != 0 && temperatures[stack[len(stack)-1]] < temp {
answers[stack[len(stack)-1]] = i - stack[len(stack)-1]
stack = stack[:len(stack)-1]
}
stack = append(stack, idx)
}
return answers
}
Java:
<code>class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] answers = new int[temperatures.length];
ArrayList<Integer> stack = new ArrayList<Integer>();
for(int i = 0; i < temperatures.length; i++){
int temp = temperatures[i];
while(!stack.isEmpty() && temperatures[stack.get(stack.size()-1)] < temp){
answers[stack.get(stack.size()-1)] = i - stack.get(stack.size()-1);
stack.remove(stack.size()-1);
}
stack.add(i);
}
return answers;
}
}
</code>
<code>class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] answers = new int[temperatures.length];
ArrayList<Integer> stack = new ArrayList<Integer>();
for(int i = 0; i < temperatures.length; i++){
int temp = temperatures[i];
while(!stack.isEmpty() && temperatures[stack.get(stack.size()-1)] < temp){
answers[stack.get(stack.size()-1)] = i - stack.get(stack.size()-1);
stack.remove(stack.size()-1);
}
stack.add(i);
}
return answers;
}
}
</code>
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] answers = new int[temperatures.length];
ArrayList<Integer> stack = new ArrayList<Integer>();
for(int i = 0; i < temperatures.length; i++){
int temp = temperatures[i];
while(!stack.isEmpty() && temperatures[stack.get(stack.size()-1)] < temp){
answers[stack.get(stack.size()-1)] = i - stack.get(stack.size()-1);
stack.remove(stack.size()-1);
}
stack.add(i);
}
return answers;
}
}
How can I improve/optimize the golang code? Are there books I can follow for tips and tricks.