数据机构与算法|Leetcode.581.最短无序连续子数组之HashMap真的好用
Leetcode.581.最短无序连续子数组之HashMap真的好用
- 前言
- 一、问题
-
- 1、分析问题
- 2、转换问题
- 3、写代码之前
- 4、写代码之后
- 三、算法评估
-
- 1、时间复杂度
- 2、空间复杂度
- 四、收获
前言
刷算法打卡中,抽到一个中等的题,但是你用HashMap就会非常简答。我们依旧是整理思路,不乱来,这样解题才快。一、问题 1、分析问题
文章图片
输入一个无序数组,寻找最短无序数组,并返回个数。通过给数组排个序,找出变化的位置差就是最短无序数组。2、转换问题
用Map将下标和数值存入,然后给value拍一个序,通过看对应的key值是否有对应的顺序来看最短无序数组在哪里。3、写代码之前
public class FindUnsortedSubarray { public int findUnsortedSubarray(int[] nums) {/*分析问题
* 输入一个无序数组,寻找最短无序数组,并返回个数。
* 转换问题
* 用Map将下标和数值存入,然后给value拍一个序,通过看对应的key值是否有对应的顺序来看最短无序数组在哪里。
*/
//1. 申请Map将数据的下标和数据存入
//2. 通过for循环比较小标与数据下标即Key是否相等,来计算最终的最短数组长度。
//3. 返回数组长度。
}
4、写代码之后
public class FindUnsortedSubarray { public int findUnsortedSubarray(int[] nums) {/*分析问题
* 输入一个无序数组,寻找最短无序数组,并返回个数。
* 转换问题
* 用Map将下标和数值存入,然后给value拍一个序,通过看对应的key值是否有对应的顺序来看最短无序数组在哪里。
*/
//1. 申请Map将数据的下标和数据存入
Map m = new HashMap<>();
for(int i = 0;
inew Integer(nums[j]));
}
//2. 通过for循环比较小标与数据下标即Key是否相等,来计算最终的最短数组长度。
List>list = new ArrayList>(m.entrySet());
list.sort((o1,o2)->o1.getValue().compareTo(o2.getValue()));
int begin=-1,end=nums.length-1;
for(int i = 0;
ibegin;
i--) {if(list.get(i).getKey() != i) {end = i;
break;
}
}
//3. 返回数组长度。
return begin==-1?0:end-begin+1;
}
三、算法评估 1、时间复杂度
O(nlogn),这是list.sort()的排序复杂度。2、空间复杂度
O(n),n为nums.length。四、收获
【数据机构与算法|Leetcode.581.最短无序连续子数组之HashMap真的好用】HashMap和Arraylist这种基础结构是真的好用,建议经常使用。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM