* translation: Update replace_linear_by_hashing.md refined some parts of it. * Update replace_linear_by_hashing.md * Update replace_linear_by_hashing.md --------- Co-authored-by: Yudong Jin <krahets@163.com>
2.2 KiB
Hash optimization strategies
In algorithm problems, we often reduce the time complexity of an algorithm by replacing a linear search with a hash-based search. Let's use an algorithm problem to deepen the understanding.
!!! question
Given an integer array `nums` and a target element `target`, please search for two elements in the array whose "sum" equals `target`, and return their array indices. Any solution is acceptable.
Linear search: trading time for space
Consider traversing through all possible combinations directly. As shown in the figure below, we initiate a nested loop, and in each iteration, we determine whether the sum of the two integers equals target
. If so, we return their indices.
The code is shown below:
[file]{two_sum}-[class]{}-[func]{two_sum_brute_force}
This method has a time complexity of O(n^2)
and a space complexity of O(1)
, which can be very time-consuming with large data volumes.
Hash search: trading space for time
Consider using a hash table, where the key-value pairs are the array elements and their indices, respectively. Loop through the array, performing the steps shown in the figure below during each iteration.
- Check if the number
target - nums[i]
is in the hash table. If so, directly return the indices of these two elements. - Add the key-value pair
nums[i]
and indexi
to the hash table.
The implementation code is shown below, requiring only a single loop:
[file]{two_sum}-[class]{}-[func]{two_sum_hash_table}
This method reduces the time complexity from O(n^2)
to O(n)
by using hash search, significantly enhancing runtime efficiency.
As it requires maintaining an additional hash table, the space complexity is O(n)
. Nevertheless, this method has a more balanced time-space efficiency overall, making it the optimal solution for this problem.