g0001_0100.s0031_next_permutation.complexity.md Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java Show documentation
Show all versions of leetcode-in-java Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
**Time Complexity (Big O Time):**
1. The program first iterates backward through the array to find the first element `i` where `nums[i] < nums[i+1]`. This operation takes O(n) time, where n is the length of the array.
2. If such an element `i` is found, the program then iterates backward again to find the smallest element `j` to the right of `i` such that `nums[j] > nums[i]`. This operation also takes O(n) time, where n is the length of the array.
3. After finding `i` and `j`, the program swaps these two elements, which takes constant time O(1).
4. Finally, the program reverses the subarray to the right of `i` (from index `i+1` to the end of the array), which takes O(n) time in the worst case.
Overall, the time complexity of the program is dominated by the two linear scans through the array, so it's O(n), where n is the length of the input array `nums`.
**Space Complexity (Big O Space):**
The space complexity of the program is O(1) because it uses a constant amount of additional space for variables like `i`, `j`, and `temp`. Regardless of the size of the input array, the space used by these variables remains constant.
In summary, the time complexity of the provided program is O(n), and the space complexity is O(1), where n is the length of the input array `nums`.