This commit is contained in:
fanxb 2022-02-23 23:29:58 +08:00
parent e6daa3aafa
commit 92e87cbf03
3 changed files with 68 additions and 18 deletions

View File

@ -0,0 +1,24 @@
package com.fanxb.common;
/**
* 线性扫描只需找到最大和最小数的差即可假设第一个数为最小值从第二个数开始遍历如果大于最小值则计算利润如果小于最小值就将最小值设置当前值然后继续往后便利知道遍历完毕
*
* @author FleyX
* date 2022/2/23 22:47
*/
public class Q121 {
public int maxProfit(int[] prices) {
int max = 0;
int minVal = prices[0];
for (int i = 1; i < prices.length; i++) {
if (prices[i] > minVal) {
max = Math.max(max, prices[i] - minVal);
} else {
minVal = prices[i];
}
}
return max;
}
}

View File

@ -6,9 +6,7 @@ import java.util.List;
import java.util.Map;
/**
* 题目地址 https://leetcode-cn.com/problems/partition-labels/
* 解题思路首先遍历一次字符串记录每个字母最后出现的位置
* 然后再遍历一遍记录当前字符串的开始位置start,结束位置end. 当第i个字母的结束位置end时end=第i个字母的结束位置知道i=end说明当前位置为字符串的结束位置
* 找到每次从低点到高点的变化即可
*
* @author fanxb
* Date: 2020/6/9 15:10
@ -17,25 +15,19 @@ public class Q122 {
public static int solution(int[] prices) {
int res = 0;
int start = -1, end = -1;
int start = -1;
for (int i = 0; i < prices.length - 1; i++) {
if (prices[i + 1] > prices[i]) {
//说明是上坡
if (start == -1) {
start = prices[i];
}
end = prices[i + 1];
} else if (prices[i + 1] < prices[i]) {
//说明开始下坡了
if (end > start) {
res += end - start;
}
if (prices[i + 1] > prices[i] && start == -1) {
//说明是首次上坡
start = prices[i];
} else if (prices[i + 1] < prices[i] && start != -1) {
res += prices[i] - start;
start = -1;
end = -1;
}
}
if (end > start) {
res += end - start;
//判断最后一个能不能卖
if (start != -1 && prices[prices.length - 1] > start) {
res += prices[prices.length - 1] - start;
}
return res;
}

View File

@ -0,0 +1,34 @@
package com.fanxb.common;
/**
* 题目地址 https://leetcode-cn.com/problems/partition-labels/
*
* @author fanxb
* Date: 2020/6/9 15:10
*/
public class Q123 {
public static int solution(int[] prices) {
int res = 0;
int start = -1;
for (int i = 0; i < prices.length - 1; i++) {
if (prices[i + 1] > prices[i] && start == -1) {
//说明是首次上坡
start = prices[i];
} else if (prices[i + 1] < prices[i] && start != -1) {
res += prices[i] - start;
start = -1;
}
}
//判断最后一个能不能卖
if (start != -1 && prices[prices.length - 1] > start) {
res += prices[prices.length - 1] - start;
}
return res;
}
public static void main(String[] args) {
int[] prices = {7, 1, 5, 3, 6, 4};
System.out.println(solution(prices));
}
}