当前位置:网站首页>划分字母区间[贪心->空间换时间->数组hash优化]
划分字母区间[贪心->空间换时间->数组hash优化]
2022-08-11 01:16:00 【REN_林森】
前言
贪心是一个很考察分析能力的题型之一,第一步需要分析到贪心点,第二步需要利用已知数据结构来完成构建代码,当如果不能直接解决,那就要考虑是否需要问题转换一下了。
一、划分字母区间

二、贪心&hash数组
从左到到右,一旦右边没前面出现的字符,就切断。(贪心点)
如何实现?即如何知道右边还有没有该字符?从后往前先标记最后一个字符的位置。
package everyday.greed;
import java.util.*;
// 划分字母区间
public class PartitionLabels {
// 从左到到右,一旦右边没前面出现的字符,就切断。(贪心点)
// 如何实现?即如何知道右边还有没有该字符?从后往前先标记最后一个字符的位置。
public List<Integer> partitionLabels(String s) {
Map<Character, Integer> fx = new HashMap<>();
char[] arr = s.toCharArray();
for (int i = arr.length - 1; i >= 0; i--) if (!fx.containsKey(arr[i])) fx.put(arr[i], i);
List<Integer> ans = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
size = fx.get(arr[i]);
for (int j = i + 1; j < size; j++) {
if (fx.get(arr[j]) > size) size = fx.get(arr[j]);
}
ans.add(size - i + 1);
i = size;
}
return ans;
}
int size;
// hash数组会更快。
public List<Integer> partitionLabels2(String s) {
int[] fx = new int[26];
char[] arr = s.toCharArray();
for (int i = arr.length - 1; i >= 0; i--) if (fx[arr[i] - 'a'] == 0) fx[arr[i] - 'a'] = i;
List<Integer> ans = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
size = fx[arr[i] - 'a'];
for (int j = i + 1; j < size; j++) {
if (fx[arr[j] - 'a'] > size) size = fx[arr[j] - 'a'];
}
ans.add(size - i + 1);
i = size;
}
return ans;
}
}
总结
1)从分析贪心点,再到选者hashMap,再到hash优化,虽然没有问题转换,但是锻炼常规分析流程。
参考文献
[1] LeetCode 划分字母区间
边栏推荐
猜你喜欢

C # - delegate detailed usage

② 关系数据库标准语言SQL 数据定义(创建、修改基本表)、数据更新(增删改)

深度解析volatile关键字(保证够全面)

sed of the Three Musketeers of Shell Programming

How to check if the online query suddenly slows down

Only lazy and hungry. You still don't understand the singleton pattern!

【ASM】字节码操作 ClassWriter COMPUTE_FRAMES 的作用 与 visitMaxs 的关系

池化技术有多牛?来,告诉你阿里的Druid为啥如此牛逼!

R语言多元线性回归、ARIMA分析美国不同候选人对经济GDP时间序列影响

QT+VTK+PCL拟合圆柱并计算起始点、中止点
随机推荐
导入数据包上传宝贝提示“类目不能为空”是什么原因,怎么解决?
MSTP - Multiple Spanning Tree (Case + Configuration)
数据分析面试手册《SQL篇》
EN 12467纤维水泥平板产品—CE认证
std::format格式化自定义类型
Shell 文本三剑客 Sed
分库分表ShardingSphere-JDBC笔记整理
[ASM] The relationship between the role of the bytecode operation ClassWriter COMPUTE_FRAMES and visitMaxs
php 判断数组是否为多维数组
Two-dimensional array combat project -------- "Minesweeper Game"
LeetCode_优先级队列_692.前K个高频单词
【HFSS学习记录1】实例:宽带非对称多节定向耦合器设计
21. Aliyun oss
MySQL进阶查询
使用 BeanUtils 做属性拷贝,性能有点拉胯!
关于编程本质那些事
Mysql database installation and configuration detailed tutorial
Kunpeng compilation and debugging and basic knowledge of native development tools
Shell Text Three Musketeers Sed
22. Inventory service