Terrain Elevation Match - codepath/compsci_guides GitHub Wiki
TIP102 Unit 3 Session 2 Standard (Click for link to problem statements)
U-nderstand
Understand what the interviewer is asking for by using test cases and questions about the problem.
- Q: What is the input to the problem?
- A: The input is a string
terrain
where each character is either'I'
or'D'
, representing the relationship between consecutive elevations.
- A: The input is a string
- Q: What is the output?
- A: The output is a list of integers representing a valid elevation sequence that matches the given
terrain
string.
- A: The output is a list of integers representing a valid elevation sequence that matches the given
- Q: How is the elevation sequence determined?
- A: Start with the smallest and largest possible elevations, and assign them based on whether the current terrain character is
'I'
(increasing) or'D'
(decreasing).
- A: Start with the smallest and largest possible elevations, and assign them based on whether the current terrain character is
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Use two pointers, low
and high
, to track the smallest and largest remaining elevations. Iterate through the terrain
string and construct the elevation sequence by assigning the appropriate value based on whether the terrain is increasing or decreasing.
1. Initialize two pointers, `low` to 0 and `high` to `len(terrain)`.
2. Initialize an empty list `elevation` to store the elevation sequence.
3. Iterate through the `terrain` string:
1. If the current character is `'I'`, append `low` to `elevation` and increment `low`.
2. If the current character is `'D'`, append `high` to `elevation` and decrement `high`.
4. After processing all characters in `terrain`, append the final remaining value (either `low` or `high` since they should be equal) to `elevation`.
5. Return the `elevation` list.
⚠️ Common Mistakes
- Forgetting to append the final remaining value after processing the entire
terrain
string. - Mismanaging the
low
andhigh
pointers, leading to incorrect elevation sequences. - Not accounting for all characters in the
terrain
string, which could result in incomplete sequences.
I-mplement
def terrain_elevation_match(terrain):
low, high = 0, len(terrain)
elevation = []
for char in terrain:
if char == 'I':
elevation.append(low)
low += 1
else:
elevation.append(high)
high -= 1
elevation.append(low) # or high, as low and high should be equal here
return elevation
# Example usage
print(terrain_elevation_match("IDID")) # Output: [0, 4, 1, 3, 2]
print(terrain_elevation_match("III")) # Output: [0, 1, 2, 3]