数据结构与算法--再来聊聊数组

再来聊聊数组

  • 这篇我们来总结一下数组相关的一些算法,数组的特点在于我们能通过下标得到对应数据,时间复杂度在O(1),之前有多篇文章有数组相关的体系,一下来一个归纳:

数据结构与算法–判断扑克牌是否顺子

数据结构与算法–翻转单词顺序

数据结构与算法–有序数组中找出和为s的两个数字

数据结构与算法–第一个只出现一次的字符

数据结构与算法–数组中出一次的数字

数据结构与算法–数字在排序数组中出现次数

数据结构与算法–数组中的逆序对

数据结构与算法–将数组排成最小的数

数据结构与算法-- 数组中出现次数超过一半的数字(时间复杂度的讨论)

数据结构与算法–数组:二维数组中查找

数据结构与算法–字符串的排列组合问题

数据结构与算法–回朔,矩阵中查找字符串路径

数据结构与算法–字符串:字符串替换

数据结构与算法–查找与排序另类用法

数据结构与算法–经典10大排序算法(动图演示)【建议收藏】

  • 以上是现阶段已经解除的数组相关,包括字符串其实也就是数组问题,其中用的最多的是双指针,还有就是归并法,二分法,其中排序是最重要的,在最后一排10大排序算法中详细介绍了每一种排序,并有动图演示。有的根据数组中数据的特殊性进行解题,例如出现一次的数字,利用位运算相关知识,还有排序算法思想的另类用法,利用排序思想进行查询。等,发现还是基础知识的运用最重要。
  • 以上文章中都与是运用数组进行解题,或者是其中有一个方法是用的数组。
  • 接下来是今天的题目:

最长子串问题:给定一个字符串,找出字符串中的最长子串,使得这个子串中没有重复的数字

  • 因为写过之前的题目:有序数组中找出和为s的两个数字 ,我第一反应就是双指针遍历数组,分析如下:
    • 指针start,end都从0,开始,在end < length-1 情况下让end++
    • 判断当前指针范围内是否有重复数字,
    • 如果有,当前最长子串就是 maxTemp = start ~ end-1,先判断最长子串与当前maxTemp大小,取最大值,此时我们将start++
    • 如果没有重复数字,那么我们继续end++
    • 继续如上步骤,知道end = length-1 或者start > end
  • 以上遍历一次能得到最终值,但是在判断当前范围是否重复时候必然有额外开销,
    • 如果直接遍历判断,那么最终时间复杂度将会变成O(n2)
    • 我用空间换时间
      • 如果输入数据只有普通字符a~z,那么我们自建一个256 大小的hash表,用数组做容器
      • 如果输入数据中海油汉字等其他字符,那么我们只能用Map集合了,或者用链表自实现Map,在上文 数据结构与算法–第一个只出现一次的字符 我们就是如此实现
  • 如下动图:

在这里插入图片描述

  • 如上分析有如下代码:
/*** 给定一个字符串,找出字符串中的最长子串,使得这个子串中没有重复的数字* @author liaojiamin* @Date:Created in 16:39 2021/7/15*/
public class FindLongestSubStr {public static void main(String[] args) {String maxSubStr = "1234578123";System.out.println(findLongestStr(maxSubStr));}/*** 双指针实现滑动窗口,并空间换时间* */public static Integer findLongestStr(String str){if(str == null || str.length() <= 0){return 0;}Map<Character, Integer> validateMap = new HashMap<>();char[] chars = str.toCharArray();int positionStart = 0;int positionEnd = 0;int maxSumLength = 0;while (positionEnd <= chars.length -1 && positionStart <= positionEnd){if(validateMap.containsKey(chars[positionEnd])){validateMap.remove(chars[positionStart]);positionStart++;}else {validateMap.put(chars[positionEnd], 1);positionEnd++;}int length = positionEnd-1 - positionStart +1;if(maxSumLength < length){maxSumLength = length;}}return maxSumLength;}}

上一篇:数据结构与算法–死磕二叉树
下一篇:数据结构与算法–二叉树第k个大的节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java基础]泛型基础

可变参数的使用&#xff1a; 代码如下: package CanChangePack;import java.util.Arrays; import java.util.List;public class ArgsDemo01 {public static void main(String[] args){List<String> list Arrays.asList("hello","world","jav…

数据结构与算法--二叉树第k个大的节点

二叉树第k个大的节点 二叉树文章列表&#xff1a; 数据结构与算法–面试必问AVL树原理及实现 数据结构与算法–二叉树的深度问题 数据结构与算法–二叉堆&#xff08;最大堆&#xff0c;最小堆&#xff09;实现及原理 数据结构与算法–二叉查找树转顺序排列双向链表 数据…

Istio 中的 Sidecar 注入及透明流量劫持过程详解

图片来源&#xff1a;上海五角场 by Jimmy Song本文基于 Istio 1.5.1 版本&#xff0c;将为大家介绍以下内容&#xff1a;什么是 sidecar 模式和它的优势在哪里。Istio 中是如何做 sidecar 注入的&#xff1f;Sidecar proxy 是如何做透明流量劫持的&#xff1f;流量是如何路由到…

数据结构与算法--求1~n能组成的所有二叉搜索树的排列

给定一个整数n&#xff0c;生成并返回所有N个节点组成并且节点值从1到n互不相同的不同二叉树&#xff0c;可以按照任意顺序 二叉树文章列表&#xff1a; 数据结构与算法–面试必问AVL树原理及实现 数据结构与算法–二叉树的深度问题 数据结构与算法–二叉堆&#xff08;最大…

Java语法基础50题训练(下)

题目1: HashMap集合存储学生对象并遍历。 需求: 创建一个HashMap集合&#xff0c;键是学生对象(Student)&#xff0c;值是居住地(String)。存储多个键值对象&#xff0c;并遍历。 要求: 保证键的唯一性&#xff1a;如果学生对象的成员变量值相同&#xff0c;我们就认为是同一…

用long类型让我出了次生产事故,写代码还是要小心点

昨天发现线上试跑期的一个程序挂了&#xff0c;平时都跑的好好的&#xff0c;查了下日志是因为昨天运营跑了一家美妆top级淘品牌店&#xff0c;会员量近千万&#xff0c;一下子就把128G的内存给爆了&#xff0c;当时并行跑了二个任务&#xff0c;没辙先速写一段代码限流&#x…

Mongodb查询分析器解析

Mongodb查询分析器 动态相关项目中涉及到数据量大和吞吐量的接口&#xff0c;例如关注页面动态&#xff0c;附近动态&#xff0c;这部分数据都是存储在mongodb中&#xff0c;在线上数据中分类两个mongodb集合存储其中关注动态基于扩散写的设计&#xff0c;数据量已经快到 8 亿…

[Java基础]Collections概述和使用

代码如下: package CollectionDemo01;import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List;public class CollectionDemo01 {public static void main(String[] args){List<Integer> list new ArrayList&l…

链路追踪在ERP系统中的应用实践

源宝导读&#xff1a;随着ERP的部署架构越来越复杂&#xff0c;对运维监控、问题排查等工作增加了难度&#xff0c;本文将介绍通过引入链路追踪技术&#xff0c;提高ERP系统问题排查效率&#xff0c;支撑更全面监控系统运行情况的实践过程。一、导读随着ERP的部署架构越来越复杂…

[Java基础]File基础

File类概述和构造方法: 代码如下: package FileStudyPack;import java.io.File;public class FileDemo01 {public static void main(String[] args){File f1 new File("D:\\JavaDemo\\java.txt");System.out.println(f1);File f2 new File("D:\\JavaDemo&quo…

java 日志乱码_【开发者成长】JAVA 线上故障排查完整套路!

云栖号资讯&#xff1a;【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01;线上故障主要会包括 CPU、磁盘、内存以及网络问题&#xff0c;而大多数故障可能会包含不止一个层面的问题&#xff0c;所以进行…

谈谈登录密码传输这件小事

背景 大大小小的系统其实都离不开登录这个小小的功能&#xff0c;前段时间老黄在审查公司部分系统代码时&#xff0c;发现不少系统的登录还是很粗暴的&#xff0c;粗暴到让人不敢说话的那种。说到登录&#xff0c;结合标题&#xff0c;其实大部分人应该都猜到那个粗暴到让人不敢…

技术分享杂七杂八技术

技术分享 听花谷 距离名宿 6~7 公里左右&#xff0c;丽江网红基地&#xff0c;有举办婚礼的地方听花谷&#xff0c;坐落于玉龙雪山脚下&#xff0c;前有玉龙雪山&#xff0c;后有原始森林。园内共有三处白色空间&#xff0c;第一处共有三层&#xff0c;婚礼举行&#xff0c;发…

java 操作日志设计_日志系统新贵 Loki,确实比笨重的ELK轻

本文同步Java知音社区&#xff0c;专注于Java作者&#xff1a;linkt1234http://blog.csdn.net/Linkthaha/article/details/100575278最近&#xff0c;在对公司容器云的日志方案进行设计的时候&#xff0c;发现主流的ELK或者EFK比较重&#xff0c;再加上现阶段对于ES复杂的搜索功…

Istio1.5 Envoy 数据面 WASM 实践

Istio 1.5 回归单体架构&#xff0c;并抛却原有的 out-of-process 的数据面扩展方式&#xff0c;转而拥抱基于 WASM 的 in-proxy 扩展&#xff0c;以期获得更好的性能。本文基于网易杭州研究院轻舟云原生团队的调研与探索&#xff0c;介绍 WASM 的社区发展与实践。超简单版解释…

elasticSearch -- (文档,类型,索引)

问题:大规模数据如何检索 当系统数据量达到10亿&#xff0c;100亿级别的时候&#xff0c;我们系统该如何去解决这种问题。 数据库选择—mysql&#xff0c; sybase&#xff0c;oracle&#xff0c;mongodb&#xff0c;hbase…单点故障如何解决—lvs&#xff0c; F5&#xff0c;…

asp后台调用产品数据_后台产品经理,需掌握这些数据交互知识

人们每天都在接收信息和发送信息&#xff0c;在传递信息的过程中&#xff0c;明白对方要表达的意思。数据也是如此&#xff0c;在系统交换数据的过程中&#xff0c;就伴随着数据交互。本篇文章将为大家具体分析前端和后台的数据交互与协议。本文所说的”数据交换” 是指在计算机…