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.
Apparently, many engineers take measures on the site called LetCode.
It is a site that trains the algorithmic power that can withstand the coding test that is done in the early story, and it is an inevitable path for those who want to build a career at an overseas tech company.
I wrote it in a big way, but I have no plans to have such an interview at the moment.
However, as an IT engineer, it would be better to have the same level of algorithm power as a person, so I would like to solve the problem irregularly and write down the method I thought at that time.
I'm solving it with Python3.
Leet Code Table of Contents Starting from Zero
Last time Leet Code Day89 "62. Unique Paths" starting from zero
Twitter I'm doing it.
** Technical Blog Started! !! ** ** I think the technology will write about LetCode, Django, Nuxt, and so on. ** This is faster to update **, so please bookmark it!
1011. Capacity To Ship Packages Within D Days The difficulty level is Medium. This is an excerpt from Leet Code 60 Questions I Want to Solve for Coding Interview Preparation.
The problem is that conveyor belts have packages that must be shipped from one port to another within D days.
The ʻith load on the conveyor belt has a weight
[i]`. Every day, the cargo on the conveyor belt is loaded onto the ship (in the order given by weight) and cannot be loaded in excess of the ship's maximum weight capacity.
Returns the minimum weight capacity of the ship that all packages on the conveyor belt will be shipped within D days.
Example 1:
Input: weights = [1,2,3,4,5,6,7,8,9,10], D = 5 Output: 15 Explanation: A ship capacity of 15 is the minimum to ship all the packages in 5 days like this: 1st day: 1, 2, 3, 4, 5 2nd day: 6, 7 3rd day: 8 4th day: 9 5th day: 10
Note that the cargo must be shipped in the order given, so using a ship of capacity 14 and splitting the packages into parts like (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) is not allowed.
Example 2:
Input: weights = [3,2,2,4,1,4], D = 3 Output: 6 Explanation: A ship capacity of 6 is the minimum to ship all the packages in 3 days like this: 1st day: 3, 2 2nd day: 2, 4 3rd day: 1, 4
Example 3:
Input: weights = [1,2,3,1,1], D = 4 Output: 3 Explanation: 1st day: 1 2nd day: 2 3rd day: 3 4th day: 1, 1
class Solution:
def shipWithinDays(self, weights: List[int], D: int) -> int:
min_num = max_num = 0
min_num = max(weights)
max_num = sum(weights)
while min_num < max_num:
mid = (min_num + max_num)//2
days = temp_weight = 0
for i in weights:
temp_weight += i
if temp_weight > mid:
days += 1
temp_weight = i
if days + 1 <= D:
max_num = mid
else:
min_num = mid+1
return min_num
# Runtime: 508 ms, faster than 92.24% of Python3 online submissions for Capacity To Ship Packages Within D Days.
# Memory Usage: 17.1 MB, less than 7.21% of Python3 online submissions for Capacity To Ship Packages Within D Days.
I thought about it in a binary search.
The minimum value here is the maximum value in the list, and the maximum value is the total value in the list. This is the condition because it leads to the minimum load capacity by acquiring each value, storing it, and comparing it with the schedule through a binary search. The reason for these two values is that no matter how the values change, the lower limit of the load capacity is the lowest value in the list, and the maximum value of the load capacity is the sum of the list. Conversely, I think it will be much easier if you can set the lower and upper limits.
For the test case in Example 1, min_num
and max_num
contain 10 and 55, respectively. And while this relationship remains min_num <max_num
, the intermediate value mid
does the familiar process of binary search.
After that, processing is performed based on the relationship between days
and D
, the range is narrowed steadily, and finally the minimum load capacity is derived.
I was looking around for an easy-to-understand example because I thought it was difficult to explain Video explaining in Java had. The language itself is Java, but the basic idea is the same, so if it is difficult to understand in my explanation, you may want to take a look here.
So that's it for this time. Thank you for your hard work.
Recommended Posts