You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
3.0 KiB
57 lines
3.0 KiB
---
|
|
id: array
|
|
title: Array
|
|
---
|
|
|
|
## Notes
|
|
|
|
Is the array sorted or partially sorted? If it is, some form of binary search should be possible. This also usually means that the interviewer is looking for a solution that is faster than O(n).
|
|
|
|
Can you sort the array? Sometimes sorting the array first may significantly simplify the problem. Make sure that the order of array elements do not need to be preserved before attempting a sort.
|
|
|
|
For questions where summation or multiplication of a subarray is involved, pre-computation using hashing or a prefix/suffix sum/product might be useful.
|
|
|
|
If you are given a sequence and the interviewer asks for O(1) space, it might be possible to use the array itself as a hash table. For example, if the array only has values from 1 to N, where N is the length of the array, negate the value at that index (minus one) to indicate presence of that number.
|
|
|
|
Also O(n) doesn't mean you can only traverse the array once. Sometimes traversing the array more than once can help you solve the problem easily.
|
|
|
|
## Arrays are sequences
|
|
|
|
Are there duplicate values in the array, would it affect the answer?
|
|
|
|
When using an index to iterate through array elements, be careful not to go out of bounds.
|
|
|
|
Be mindful about slicing or concatenating arrays in your code. Typically, slicing and concatenating arrays require O(n) time. Use start and end indices to demarcate a subarray/range where possible.
|
|
|
|
Sometimes you can traverse the array from the right rather than from the left.
|
|
|
|
Master the [sliding window technique](https://discuss.leetcode.com/topic/30941/here-is-a-10-line-template-that-can-solve-most-substring-problems) that applies to many subarray problems.
|
|
|
|
When you are given two arrays to process, it is common to have one index per array (pointer) to traverse/compare the both of them. For example, we use the same approach to merge two sorted arrays.
|
|
|
|
## Corner cases
|
|
|
|
- Empty sequence
|
|
- Sequence with 1 or 2 elements
|
|
- Sequence with repeated elements
|
|
|
|
## Recommended LeetCode questions
|
|
|
|
- [Two Sum](https://leetcode.com/problems/two-sum/)
|
|
- [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/)
|
|
- [Contains Duplicate](https://leetcode.com/problems/contains-duplicate/)
|
|
- [Product of Array Except Self](https://leetcode.com/problems/product-of-array-except-self/)
|
|
- [Maximum Subarray](https://leetcode.com/problems/maximum-subarray/)
|
|
- [Maximum Product Subarray](https://leetcode.com/problems/maximum-product-subarray/)
|
|
- [Find Minimum in Rotated Sorted Array](https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/)
|
|
- [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/)
|
|
- [3Sum](https://leetcode.com/problems/3sum/)
|
|
- [Container With Most Water](https://leetcode.com/problems/container-with-most-water/)
|
|
- [Sliding Window Maximum](https://leetcode.com/problems/sliding-window-maximum/)
|
|
|
|
## Recommended courses
|
|
|
|
import AlgorithmCourses from '../\_courses/AlgorithmCourses.md'
|
|
|
|
<AlgorithmCourses />
|