再来聊聊数组

  • 这篇我们来总结一下数组相关的一些算法,数组的特点在于我们能通过下标得到对应数据,时间复杂度在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个大的节点

数据结构与算法--再来聊聊数组相关推荐

  1. 新星计划Day4【数据结构与算法】 稀疏数组与队列

    新星计划Day4[数据结构与算法] 稀疏数组与队列

  2. 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组

    数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...

  3. 菜鸟窝-数据结构与算法之稀疏数组

    数据结构与算法 数据结构是组织(包括存储.处理等)数据的方式,是算法的基础 程序=数据结构+算法:数据结构分为线性和非线性 五子棋问题.约瑟夫问题等都离不开数据结构与算法 常用算法案例:修路问题.最短 ...

  4. 数据结构与算法 栈的数组实现

    Java数据结构和算法 上一篇 主目录 下一篇 package stack;import java.util.Scanner;public class ArrayStackDemo {public s ...

  5. 数据结构与算法顺序表数组版

    博主还在学校,写网络编程特别是后面的线程和多路I/O实在是太费精力,所以博主先把数据结构多跟新一点,也正好把学校的C语言数据结构的作业做了,正好一举两得 这个内容比较简单,就不再细说. #includ ...

  6. 数据结构与算法学习:数组

    今天我们开始学习最基本,最简单的数据类型:数组:它是一种线性数据结构.具有一组连续的内存空间来存储相同数据类型的结构. 数据越界问题思考: 分析下面的代码,栈是由高到低位增长的,所以,i和数组的数据从 ...

  7. 数据结构与算法:动态数组(利用万能指针实现任意类型数组操作)

    原理介绍 我们利用万能指针来实现动态数组,数组元素类型可以是任意类型,因为我们只维护用户提供的数据的地址,所以可以用万能指针来接受,这样就实现了类似C++中的模板功能了. 先说说动态数组和静态数组.静 ...

  8. 数据结构与算法:12 数组与稀疏矩阵

    12 数组与稀疏矩阵 知识结构: 1. 数组 1.1 数组的定义 数组是具有一定顺序关系的若干对象组成的集合,组成数组的对象称为数组元素. 例如: 向量对应一维数组 A=(a0,a1,⋯,an−1)A ...

  9. 有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)

    一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进 ...

最新文章

  1. 整理了 65 个 Matplotlib 案例,这能不收藏?
  2. 使用SpringMVC创建支持向下兼容的版本化的API接口
  3. 解密个性化资讯推荐技术
  4. 商城项目实战2-登录模块的实现
  5. 软件项目管理0707:要对客户发自真心的好
  6. CCTMXTiledMap的使用
  7. flask 学习笔记 mvc ,sqlalchemy(insert,update)
  8. tgp饥荒服务器mod文件在哪,饥荒联机版中客户端mod文件夹在哪?注意不是服务器mod!...
  9. python递归函数讲解_带你深入学习Python——Python递归详解!
  10. 70. 爬楼梯 golang 斐波那契数列
  11. Python-接口开发入门
  12. 模块开发者使用 ES Modules 的正确姿势
  13. SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
  14. pythontuple_python:tuple 真是鸡肋吗
  15. mysql 小类型_mysql数据类型
  16. MongoDB 安全与认证
  17. PHP爱好者:十天学会php之第一天
  18. springboot 集成J2Cache
  19. ideaIU-2017安装破解及汉化全包
  20. python安装face_recognition错误

热门文章

  1. linux之用echo输入数据到文本末尾以及用open ssl命令在证书文件里面获取公钥
  2. (六)python3 只需3小时带你轻松入门——循环
  3. 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
  4. 营业执照在线一键生成_如何在线制作证件照?证件照一键生成的方法
  5. python语法详解_解析 Python3 基础语法
  6. 潍坊学院计算机系崔玲玲,人工免疫算法在引水工程中的应用.pdf
  7. 被一帮小姐姐围着是什么感觉?
  8. 竟然能从一维空间变换为四维空间!?
  9. sas数据导入终极汇总-之二
  10. php 重定向到https,php – Laravel 5 – 重定向到HTTPS