It seems that coding tests are conducted overseas in interviews with engineers, and in many cases, the main thing is to implement specific functions and classes according to the theme.
As a countermeasure, it seems that a site called Let Code will take measures.
A site that trains algorithmic power that can withstand coding tests that are often done in the home.
I think it's better to have the algorithm power of a human being, so I'll solve the problem irregularly and write down the method I thought at that time as a memo.
Basically, I would like to solve the easy acceptance in descending order.
1389. Create Target Array in the Given Order
The problem is -The returned array is initially empty. -Given nums [i] and index [i], insert nums in place of index. -Repeat until there are no more nums and index elements. Finally, it returns an array and ends.
If you can't imagine it, please read it.
class Solution:
def createTargetArray(self, nums: List[int], index: List[int]) -> List[int]:
target = []
for i in range(len(nums)):
target.insert(index[i],nums[i])
return target
# Runtime: 36 ms, faster than 36.25% of Python3 online submissions for Create Target Array in the Given Order.
# Memory Usage: 13.9 MB, less than 100.00% of Python3 online submissions for Create Target Array in the Given Order.
This is what I came up with. Since it was written in Constraints that the number of elements of nums and index is the same, then it is good to turn it once with a for statement and put the number of elements in the insert function respectively. However, it's not fast and I feel it's too mundane.
Another idea I came up with was to write in a while statement, According to What I did when I wanted to make Python faster, the while statement seems to be slower in Python.
In addition, I wrote it just in case and executed it.
class Solution:
def createTargetArray(self, nums: List[int], index: List[int]) -> List[int]:
target = [0]*len(index)
j = 0
while j < len(index):
target.insert(index[j], nums[j])
j += 1
return target[:len(nums)]
# Runtime: 36 ms, faster than 36.25% of Python3 online submissions for Create Target Array in the Given Order.
# Memory Usage: 13.8 MB, less than 100.00% of Python3 online submissions for Create Target Array in the Given Order.
...that? Same thing. Rather, it uses a little less memory.
Well, for the time being, this wasn't going to speed up significantly.
The ones I couldn't think of were those that used the zip function and those that used slices.
The zip function is as described in the Official Documentation.
Create an iterator that collects elements from each iterator. This function returns an iterator of a tuple, whose i-th tuple contains the i-th element of each argument sequence or iterable. This iterator will stop when the shortest of the input iterators is exhausted. Given a single iterable argument, returns an iterator consisting of a one-element tuple. With no arguments, it returns an empty iterator.
So,
hoge = [1,2,3,4,5]
foo = [6,7,8,9,10]
bar = zip(hoge,foo)
list(bar)
[(1,6),(2,7),(3,8),(4,9),(5,10)]
It works as above.
In addition, as the one using this, here.
class Solution:
def createTargetArray(self, nums: List[int], index: List[int]) -> List[int]:
res = []
for i, v in zip(index, nums):
res.insert(i, v)
return res
# Runtime: 28 ms, faster than 90.08% of Python3 online submissions for Create Target Array in the Given Order.
# Memory Usage: 13.8 MB, less than 100.00% of Python3 online submissions for Create Target Array in the Given Order.
fast! After this, if you have similar problems, it's better to use the zip function.
Thank you for your hard work, and I hope you can solve it and write an article.
~~ Let's use my spare time to write an article about the speed of Python for statements and while statements ... ~~
Recommended Posts