当前位置:网站首页>LeetCode581+621+207
LeetCode581+621+207
2022-08-04 09:13:00 【想进阿里的小菜鸡】
用了一个很巧妙的方法做出来的。
以nums = [2,6,4,8,10,9,15]为例,叙述思路。
思路
假如我们找到左边第一个开始下降的点和右边第一个开始上升的点,那么这两个点中点的所有点都需要排序。但是会有一种情况时[1,3,3,2]。所以我们需要找到的是左边第一个比右边最小的值大的点作为start,在右边找到第一个比左边最大值大的点是end,这样,这两个点中间的所有值就是要排序的点。其实本质还是找左边第一个开始下降的点和右边第一个开始上升的点。
左边最大值又没有说范围,所以不能直接求最大值,这里可以用一边遍历,一遍求的方式。我们可以用for循环来边遍历,边比较。max先设置为nums[0],然后从下标为1的位置开始遍历,每次遍历就先找两个数中最大的数,然后用当前i位置的数和max比较,如果当前i位置的数比max小,
end就是i。找start同理的。
总结就是end是正序遍历,start是倒序遍历。
代码
class Solution {
public int findUnsortedSubarray(int[] nums) {
int start = 0;
int length = nums.length;
int end = 0;
int min = nums[length-1];
int max = nums[0];
for(int i= 1;i<length;i++){
max = Math.max(nums[i],max);
min = Math.min(nums[length-i-1],min);
if(nums[i]<max){
end = i;
}
if(nums[length-i-1]>min){
start =length-i-1;
}
}
if(end == start){
return 0;
}
return end-start+1;
}
}思路
这道题也是看的题解解决的。大家可以看这位大佬的题解,画的图很不错。用的是贪心算法。
代码
class Solution {
public int leastInterval(char[] tasks, int n) {
int[] table = new int[26];
for(char s:tasks){
table[s-'A']++;
}
int maxCount = 0;
for(int i = 0;i<table.length;i++){
maxCount = Math.max(table[i],maxCount);
}
int res = (maxCount-1)*(n+1);
int temp = 0;
for(int i = 0;i<table.length;i++){
if(table[i]!=0){
temp++;
}
}
return Math.max((res+temp),tasks.length);
}
}思路
先构造图,然后用dfs遍历图,在遍历的时候判断图是否有圈,有圈就说明是不可能上完的。
代码
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
int[] flages = new int[numCourses];//记录当前节点是否被访问过。正在访问是1,访问后是2.
List<ArrayList<Integer>> graph = new ArrayList(numCourses);
for(int i = 0;i<numCourses;i++){
graph.add(new ArrayList<Integer>());
}
//以上是初始化图的存储结构.
for(int i = 0;i<prerequisites.length;i++){
int course = prerequisites[i][0];
int pre = prerequisites[i][1];
// 下标为course的数组里面的内容是course的所有前置课程
graph.get(course).add(pre);
}
//以上是将图中赋值。
//下面用dfs遍历图,并且判断图中是否有圈
for (int i = 0; i < numCourses; i++) {
if (dfs(i, flages, graph) == true) {
return false;
}
}
return true;
}
public boolean dfs(int cur, int[] flages, List<ArrayList<Integer>> graph){
if(flages[cur] == 1){
return true;
}
if(flages[cur] == 2){
return false;
}
flages[cur] = 1;
for(Integer preNode:graph.get(cur)){
if(dfs(preNode,flages,graph) == true){
return true;
}
}
flages[cur] = 2;
return false;
}
}边栏推荐
- csdn图片去水印 | 其他方法无效时的解决方案
- MindSpore:损失函数问题
- yuv420sp转jpg
- 获取cpu的核数
- MindSpore:【mindinsight】【Profiler】用execution_time推导出来的训练耗时远小于真实的耗时
- MindSpore:model.train中的dataset_sink_mode该如何理解?
- 云函数实现网站自动化签到配置详解【Web函数/Nodejs/cookie】
- 抬升市场投资情绪,若羽臣是否还需“自身硬”?
- 【论文笔记】Delving into the Estimation Shift of Batch Normalization in a Network
- Unity3D 数据加密
猜你喜欢

字符串相关题目

Fiddler(二)-手机抓包502错误解决方法

leetcode经典例题——56.合并区间

2022年制冷与空调设备运行操作特种作业证考试题库及模拟考试

【正点原子STM32连载】第二章 STM32简介 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

leetcode二叉树系列(二)
![[Punctuality Atom STM32 Serial] Chapter 3 Development Environment Construction Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1](/img/6f/c736a3404377961e92b3bd1b5ea90e.png)
[Punctuality Atom STM32 Serial] Chapter 3 Development Environment Construction Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1

DNS 查询原理详解—— 阮一峰的网络日志
![Detailed explanation of switch link aggregation [Huawei eNSP]](/img/c2/f9797fe8b17a418466b60cc3dc50a1.png)
Detailed explanation of switch link aggregation [Huawei eNSP]

Wang Shuang's Assembly Language Chapter 4: The First Program
随机推荐
双指针方法
Unity3D 数据加密
After four years of outsourcing, the autumn recruits finally landed
SQL后计算的利器
技术实现 | 图像检索及其在高德的应用
递归思想
【论文笔记】Understanding Long Programming Languages with Structure-Aware Sparse Attention
【正点原子STM32连载】第二章 STM32简介 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
MATLAB/Simulink快捷键
LVGL的多语言转换工具--字体设置的好助手
sync-diff-inspector 使用实践
路由/三层交换机DHCP下发地址详解【华为eNSP】
Libpq 是否支持读写分离配置
leetcode二叉树系列(一)
B站回应HR称“核心用户都是Loser”、求职者是“白嫖党”:已被劝退
有坦荡的远方
蜜芽CEO刘楠:垂直电商黄金时代已落幕 坚定转型品牌之路
Detailed explanation of telnet remote login aaa mode [Huawei eNSP]
MindSpore:【model_zoo】【resnet】尝试用THOR优化器运行时报cannot import name ‘THOR‘
他97年的,我既然卷不过他...