Skip to content

Commit 052d87b

Browse files
committed
算法- 数组需要排序的最短子数组的长度
1 parent e9e66ac commit 052d87b

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package algorithm.Interview.practice08;
2+
3+
/**
4+
* @author mood321
5+
* @date 2021/12/16 0:04
6+
7+
*/
8+
public class P_8_4_GetMinLength {
9+
public static void main(String[] args) {
10+
int[] ints={1,5,3,4,2,6,7};
11+
int minlength = getMinlength(ints);
12+
System.out.println(minlength);
13+
}
14+
public static int getMinlength(int[] arr) {
15+
if (arr == null || arr.length == 0) {
16+
return 0;
17+
}
18+
//
19+
int min = arr[arr.length - 1];
20+
int minIdx = -1;
21+
for (int i = arr.length - 1; i >= 0; i--) {
22+
if (arr[i] < min) {
23+
min = Math.min(arr[i], min);
24+
} else {
25+
minIdx = i;
26+
}
27+
28+
}
29+
if (minIdx == -1) {
30+
return 0;
31+
}
32+
int max = arr[0];
33+
int maxIdx = -1;
34+
for (int i = 1; i < arr.length; i++) {
35+
if (arr[i] < max) {
36+
maxIdx = i;
37+
} else {
38+
max=Math.max(arr[i],max);
39+
}
40+
}
41+
return maxIdx-minIdx +1;
42+
}
43+
}

src/main/resources/note/Algorithm/程序员面试.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,44 @@ N皇后问题是指N*N的棋盘要摆N个皇后,要求任何两个皇后不同
10901090
<p><a href="/src/main/java/algorithm/Interview/practice08/P_8_3_MinNumK.java"> code</a>
10911091

10921092

1093+
1094+
````
1095+
1096+
4 找到需要排序的最短子数组长度
1097+
1098+
【题目】
1099+
题目描述:对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。 给定一个整数数组A及它的大小n,请返回最短子数组的长度。
1100+
要求:时间复杂度O(n) 空间复杂度O(1)
1101+
例子: [1,5,3,4,2,6,7]
1102+
返回:4
1103+
1104+
1105+
【要求】
1106+
1107+
  O(NlogK)
1108+
【进阶】
1109+
1110+
  O(N)
1111+
  
1112+
  
1113+
【基本思路】
1114+
1115+
思路 1: 1. 从左往右找”当前值比max小”的一系列情况:
1116+
初始:max=arr[0];
1117+
如果当前元素比max大,max就等于当前元素;
1118+
如果当前元素比max小,max不变,然后继续往后找,直到最后一次出现”当前值比max小”的情形,记下此时的下标为k。
1119+
2. 从右往左找”当前值比min大”的一系列情况:
1120+
初始:min=arr[6];
1121+
如果当前元素比min小,min就等于当前元素;
1122+
如果当前元素比min大,min不变,然后继续往前找,直到最后一次出现就”当前值比min大”的情形,记下此时的下标为j。
1123+
3. 长度=k-j+1。
1124+
1125+
循环一次搞定
1126+
1127+
````
1128+
<p><a href="/src/main/java/algorithm/Interview/practice08/P_8_3_MinNumK.java"> code</a>
1129+
1130+
10931131

10941132

10951133
### 其他

0 commit comments

Comments
 (0)