热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

划分字母区间[贪心>空间换时间>数组hash优化]

贪心前言一、划分字母区间二、贪心&hash数组总结参考文献前言贪心是一个很考察分析能力的题型之一,第一步需要分析到贪心点,第二步需要利用已知数据结构来

贪心

  • 前言
  • 一、划分字母区间
  • 二、贪心&hash数组
  • 总结
  • 参考文献


前言

贪心是一个很考察分析能力的题型之一,第一步需要分析到贪心点,第二步需要利用已知数据结构来完成构建代码,当如果不能直接解决,那就要考虑是否需要问题转换一下了。

一、划分字母区间

在这里插入图片描述

二、贪心&hash数组

从左到到右,一旦右边没前面出现的字符,就切断。(贪心点)

如何实现?即如何知道右边还有没有该字符?从后往前先标记最后一个字符的位置。

package everyday.greed;import java.util.*;// 划分字母区间
public class PartitionLabels {// 从左到到右&#xff0c;一旦右边没前面出现的字符&#xff0c;就切断。&#xff08;贪心点&#xff09;// 如何实现&#xff1f;即如何知道右边还有没有该字符&#xff1f;从后往前先标记最后一个字符的位置。public List<Integer> partitionLabels(String s) {Map<Character, Integer> fx &#61; new HashMap<>();char[] arr &#61; s.toCharArray();for (int i &#61; arr.length - 1; i >&#61; 0; i--) if (!fx.containsKey(arr[i])) fx.put(arr[i], i);List<Integer> ans &#61; new ArrayList<>();for (int i &#61; 0; i < arr.length; i&#43;&#43;) {size &#61; fx.get(arr[i]);for (int j &#61; i &#43; 1; j < size; j&#43;&#43;) {if (fx.get(arr[j]) > size) size &#61; fx.get(arr[j]);}ans.add(size - i &#43; 1);i &#61; size;}return ans;}int size;// hash数组会更快。public List<Integer> partitionLabels2(String s) {int[] fx &#61; new int[26];char[] arr &#61; s.toCharArray();for (int i &#61; arr.length - 1; i >&#61; 0; i--) if (fx[arr[i] - &#39;a&#39;] &#61;&#61; 0) fx[arr[i] - &#39;a&#39;] &#61; i;List<Integer> ans &#61; new ArrayList<>();for (int i &#61; 0; i < arr.length; i&#43;&#43;) {size &#61; fx[arr[i] - &#39;a&#39;];for (int j &#61; i &#43; 1; j < size; j&#43;&#43;) {if (fx[arr[j] - &#39;a&#39;] > size) size &#61; fx[arr[j] - &#39;a&#39;];}ans.add(size - i &#43; 1);i &#61; size;}return ans;}
}

总结

1&#xff09;从分析贪心点&#xff0c;再到选者hashMap&#xff0c;再到hash优化&#xff0c;虽然没有问题转换&#xff0c;但是锻炼常规分析流程。

参考文献

[1] LeetCode 划分字母区间


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
手机用户2502859667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有