This question is the same as “Max Chunks to Make Sorted” except the integers of the given array are not necessarily distinct, the input array could be up to length 2000, and the elements could be up to 10**8.
Given an array arr of integers (not necessarily distinct), we split the array into some number of “chunks” (partitions), and individually sort each chunk. After concatenating them, the result equals the sorted array.
What is the most number of chunks we could have made?
Example 1:
1
2
3
4
5
Input:arr=[5,4,3,2,1]
Output:1
Explanation:
Splitting into two ormore chunks will notreturnthe required result.
Forexample,splitting into[5,4],[3,2,1]will result in[4,5,1,2,3],which isn'tsorted.
Example 2:
1
2
3
4
5
Input:arr=[2,1,3,4,4]
Output:4
Explanation:
We can split into two chunks,such as[2,1],[3,4,4].
However,splitting into[2,1],[3],[4],[4]isthe highest number of chunks possible.
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into some number of “chunks” (partitions), and individually sort each chunk. After concatenating them, the result equals the sorted array.
What is the most number of chunks we could have made?
Example 1:
1
2
3
4
5
Input:arr=[4,3,2,1,0]
Output:1
Explanation:
Splitting into two ormore chunks will notreturnthe required result.
Forexample,splitting into[4,3],[2,1,0]will result in[3,4,0,1,2],which isn'tsorted.
Example 2:
1
2
3
4
5
Input:arr=[1,0,2,3,4]
Output:4
Explanation:
We can split into two chunks,such as[1,0],[2,3,4].
However,splitting into[1,0],[2],[3],[4]isthe highest number of chunks possible.
Note:
arr will have length in range [1, 10].
arr[i] will be a permutation of [0, 1, ..., arr.length - 1].
A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element.
Now given an M x N matrix, return True if and only if the matrix is Toeplitz. Example 1:
1
2
3
4
5
6
7
8
Input:matrix=[[1,2,3,4],[5,1,2,3],[9,5,1,2]]
Output:True
Explanation:
1234
5123
9512
Inthe above grid,thediagonals are"[9]","[5, 5]","[1, 1, 1]","[2, 2, 2]","[3, 3]","[4]",andineachdiagonal all elements are the same,so the answer isTrue.
Example 2:
1
2
3
4
Input:matrix=[[1,2],[2,2]]
Output:False
Explanation:
The diagonal"[1, 2]"has different elements.
Note:
matrix will be a 2D array of integers.
matrix will have a number of rows and columns in range [1, 20].
Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value.
Examples:
[2,3,4] , the median is 3
[2,3], the median is (2 + 3) / 2 = 2.5
Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position. Your job is to output the median array for each window in the original array.
For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.
1
2
3
4
5
6
7
8
Window position Median
--------------------
[13-1]-353671
1[3-1-3]5367-1
13[-1-35]367-1
13-1[-353]673
13-1-3[536]75
13-1-35[367]6
Therefore, return the median sliding window as [1,-1,-1,3,5,6].
Note:
You may assume k is always valid, ie: k is always smaller than input array’s size for non-empty array.
Solution 0: Brute Force
Time complexity: O(n*klogk) TLE 32/42 test cases passed
Solution 1: Insertion Sort
Time complexity: O(k*logk + (n – k + 1)*k)
Space complexity: O(k)
C++ / vector
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Author: Huahua
// Running time: 99 ms
classSolution{
public:
vector<double>medianSlidingWindow(vector<int>& nums, int k) {
Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.
For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.
1
2
3
4
5
6
7
8
Window position Max
--------------------
[13-1]-353673
1[3-1-3]53673
13[-1-35]3675
13-1[-353]675
13-1-3[536]76
13-1-35[367]7
Therefore, return the max sliding window as [3,3,5,5,6,7].
Note:
You may assume k is always valid, ie: 1 ≤ k ≤ input array’s size for non-empty array.
Follow up:
Could you solve it in linear time?
Idea:
Solution 1: Brute Force
Time complexity: O((n – k + 1) * k)
Space complexity: O(1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
// Author: Huahua
// Running time: 180 ms
classSolution{
public:
vector<int>maxSlidingWindow(vector<int>& nums, int k) {