当前位置:网站首页>Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]
Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]
2022-07-04 14:14:00 【Ren Lindson.】
Avidité+Pile monotone
Préface
Quand il s'agit d'un problème de mots,La plupart impliquent des algorithmes gourmands,Cette situation,Pour comprendre le processus de cupidité,Ensuite, il est incorporé dans le Code.
Quand il s'agit d'ordre relatif/Les tailles avant et arrière,En général, la pile monotone est nécessaire pour la maintenance,Scénario commun:Retour en arrière par rapport au retour en arrière.
Pour la pile monotone/hashQuelque chose comme ça.,Une situation où un tableau peut être utilisé,On peut toujours utiliser un tableau,InJVMNiveau,En effetAPILes couches sont beaucoup plus rapides.,Et simple et léger.
Un.、Supprimer les lettres en double

2.、Avidité+Pile monotone
1、stack
// Supprimer la chaîne dupliquée
public class RemoveDuplicateLetters {
/* target:Supprimer les lettres en double,L'ordre minimal du dictionnaire qui doit renvoyer les résultats est. Quands[i] >= s[i+1]Ets[i]Il y a beaucoup de situations,Alors...s[i]Remplacer par‘#’No.,Et puiss[i - 1]Le cas échéant,Et aussi avecs[i+1]Comparaison. Ce sentiment de retour en arrière,La vérité est une sorte de pensée monotone. */
public String removeDuplicateLetters(String s) {
char[] arr = s.toCharArray();
// Notez combien il y a par caractère .
int[] fx = new int[26];
for (char c : arr) fx[c - 'a']++;
// Poids mort.
Stack<Character> sk = new Stack<>();
int[] set = new int[26];
for (int i = 0; i < arr.length; i++) {
// Mets le grand devant , Et il y a des caractères en double , Pour éliminer , Gardez l'avant aussi monotone que possible , Même si ce n'est pas monotone , Ce caractère doit être seulement 1- Oui..
while (!sk.isEmpty() && sk.peek() > arr[i] && fx[sk.peek() - 'a'] != 1 && set[arr[i] - 'a'] == 0) {
System.out.println(fx[sk.peek() - 'a']);
--fx[sk.peek() - 'a'];
set[sk.pop() - 'a'] = 0;
}
// Ajouter de nouveaux caractères , Si le nouveau caractère a déjà été ajouté , Pas besoin d'ajouter ça , Après tout, les mêmes petits caractères doivent être placés devant le plus petit .
if (set[arr[i] - 'a'] == 0) {
// Il n'y a pas de , Et les caractères qui sont relativement monotones par rapport aux caractères de la pile monotone .
sk.push(arr[i]);
// Définir qu'il existe déjà dans la pile monotone .
set[arr[i] - 'a'] = 1;
} else --fx[arr[i] - 'a'];// Caractères à supprimer , Donc le nombre doit être réduit 1
}
// Combiner des caractères relativement monotones en chaînes monotones .
StringBuilder sb = new StringBuilder();
while (!sk.isEmpty()) sb.insert(0, sk.pop());
return sb.toString();
}
public static void main(String[] args) {
new RemoveDuplicateLetters().removeDuplicateLetters("abafdsfasfasdfasdfasdfasfsdagewha");
}
}
2、Tableau natif+lenSubstitutionstack
// Une tentative audacieuse, Remplacer la pile par un tableau .
// Bien sûr., Les tableaux natifs sont vraiment rapides .
class RemoveDuplicateLetters2 {
/* target:Supprimer les lettres en double,L'ordre minimal du dictionnaire qui doit renvoyer les résultats est. Quands[i] >= s[i+1]Ets[i]Il y a beaucoup de situations,Alors...s[i]Remplacer par‘#’No.,Et puiss[i - 1]Le cas échéant,Et aussi avecs[i+1]Comparaison. Ce sentiment de retour en arrière,La vérité est une sorte de pensée monotone. */
public String removeDuplicateLetters(String s) {
char[] arr = s.toCharArray();
// Notez combien il y a par caractère .
int[] fx = new int[26];
for (char c : arr) fx[c - 'a']++;
// Poids mort.
char[] sk = new char[s.length()];
int skLen = 0;
int[] set = new int[26];
for (int i = 0; i < arr.length; i++) {
// Mets le grand devant , Et il y a des caractères en double , Pour éliminer , Gardez l'avant aussi monotone que possible , Même si ce n'est pas monotone , Ce caractère doit être seulement 1- Oui..
while (skLen != 0 && sk[skLen - 1] > arr[i] && fx[sk[skLen - 1] - 'a'] != 1 && set[arr[i] - 'a'] == 0) {
System.out.println(fx[sk[skLen - 1] - 'a']);
--fx[sk[skLen - 1] - 'a'];
set[sk[--skLen] - 'a'] = 0;
}
// Ajouter de nouveaux caractères , Si le nouveau caractère a déjà été ajouté , Pas besoin d'ajouter ça , Après tout, les mêmes petits caractères doivent être placés devant le plus petit .
if (set[arr[i] - 'a'] == 0) {
// Il n'y a pas de , Et les caractères qui sont relativement monotones par rapport aux caractères de la pile monotone .
sk[skLen++] = arr[i];
// Définir qu'il existe déjà dans la pile monotone .
set[arr[i] - 'a'] = 1;
} else --fx[arr[i] - 'a'];// Caractères à supprimer , Donc le nombre doit être réduit 1
}
// Combiner des caractères relativement monotones en chaînes monotones .
StringBuilder sb = new StringBuilder();
while (skLen != 0) sb.insert(0, sk[--skLen]);
return sb.toString();
}
}
Résumé
1) Les mots les plus importants , Associations avides de connaissances ; Impliquant l'ordre / Classes de taille avant et arrière , Point de connaissance de la pile monotone associative .
2)Tableauhash/Pile d'émulation de tableau,Par rapport àHashMap/StackCatégorie,Plus vite., Tout comme le tri de tas natif est plus rapide que la file d'attente prioritaire .
Références
边栏推荐
- Migration from go vendor project to mod project
- php 日志调试
- Deming Lee listed on Shenzhen Stock Exchange: the market value is 3.1 billion, which is the husband and wife of Li Hu and Tian Hua
- FS4059C是5V输入升压充电12.6V1.2A给三节锂电池充电芯片 输入小电流不会拉死,温度60°建议1000-1100MA
- 游戏出海,全球化运营
- Learning projects are self-made, and growth opportunities are self created
- Doctoral application | West Lake University Learning and reasoning system laboratory recruits postdoctoral / doctoral / research internship, etc
- 锐成芯微冲刺科创板:年营收3.67亿拟募资13亿 大唐电信是股东
- Apple 5g chip research and development failure: continue to rely on Qualcomm, but also worry about being prosecuted?
- sharding key type not supported
猜你喜欢
![[antd step pit] antd form cooperates with input Form The height occupied by item is incorrect](/img/96/379d1692f9d3c05a7af2e938cbc5d7.png)
[antd step pit] antd form cooperates with input Form The height occupied by item is incorrect

Doctoral application | West Lake University Learning and reasoning system laboratory recruits postdoctoral / doctoral / research internship, etc

吃透Chisel语言.11.Chisel项目构建、运行和测试(三)——Chisel测试之ScalaTest

Apple 5g chip research and development failure: continue to rely on Qualcomm, but also worry about being prosecuted?

学内核之三:使用GDB跟踪内核调用链

Understand chisel language thoroughly 09. Chisel project construction, operation and testing (I) -- build and run chisel project with SBT

华昊中天冲刺科创板:年亏2.8亿拟募资15亿 贝达药业是股东

JVM 内存布局详解,图文并茂,写得太好了!

使用默认路由作为指向Internet的路由

吃透Chisel语言.05.Chisel基础(二)——组合电路与运算符
随机推荐
吃透Chisel语言.06.Chisel基础(三)——寄存器和计数器
国内酒店交易DDD应用与实践——代码篇
Golang 使用 JSON unmarshal 数字到 interface{} 数字变成 float64 类型(转)
苹果5G芯片研发失败:继续依赖高通,还要担心被起诉?
C# wpf 实现截屏框实时截屏功能
Gorm data insertion (transfer)
Install and use MAC redis, connect to remote server redis
R语言ggplot2可视化:gganimate包创建动画图(gif)、使用anim_save函数保存gif可视化动图
Mask wearing detection based on yolov1
Huahao Zhongtian rushes to the scientific and Technological Innovation Board: the annual loss is 280million, and it is proposed to raise 1.5 billion. Beida pharmaceutical is a shareholder
Qt如何实现打包,实现EXE分享
R语言使用dplyr包的mutate函数对指定数据列进行标准化处理(使用mean函数和sd函数)并基于分组变量计算标准化后的目标变量的分组均值
qt 怎么检测鼠标在不在某个控件上
What is the real meaning and purpose of doing things, and what do you really want
Whether the loyalty agreement has legal effect
读取 Excel 表数据
Fs7867s is a voltage detection chip used for power supply voltage monitoring of digital system
MySQL5免安装修改
Huahao Zhongtian sprint Technology Innovation Board: perte annuelle de 280 millions de RMB, projet de collecte de fonds de 1,5 milliard de Beida Pharmaceutical est actionnaire
吃透Chisel语言.11.Chisel项目构建、运行和测试(三)——Chisel测试之ScalaTest