java数据结构与算法刷题-----LeetCode4:寻找两个正序数组的中位数

Leetcode 寻找两个正序数组的中位数 条件说明该怎么调nums1左边太多(或太大)i要往左缩,(else 情况)nums1左边太少(或太小)i要往右扩,满足找到了合法划分直接 return 中位数。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析
  1. 双指针遍历法,先得到中位数的下标
  2. 比如数组[1,2]和[3,4],合起来是[1,2,3,4]那么中位数的下标就是2和3
  3. 然后用双指针,依次遍历数组,如果数组1的值比数组2的值小,那么记录这个值,然后数组1的下标后移
  4. 反之,数组2的下标后移。直到找到中位数
  5. 需要考虑数组长度不一样的问题,比如[1,2]和[1,2,3],这样的情况,需要遍历完数组1后,只遍历数组2
  6. 最终,找到中位数对应的下标
  1. 代码
    在这里插入图片描述
class Solution {
    //双指针遍历法,先得到中位数的下标
    //  比如数组[1,2]和[3,4],合起来是[1,2,3,4]那么中位数的下标就是2和3
    //然后用双指针,依次遍历数组,如果数组1的值比数组2的值小,那么记录这个值,然后数组1的下标后移
    //反之,数组2的下标后移。直到找到中位数
    //需要考虑数组长度不一样的问题,比如[1,2]和[1,2,3],这样的情况,需要遍历完数组1后,只遍历数组2
    //最终,找到中位数对应的下标
    //时间复杂度O(min(m,n)) ===>> O((m+n)/2) 空间复杂度O(1)
    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;
        int mid1 = (m+n)/2;//中位数的位置
        int mid2 = mid1-1;//如果一共偶数个元素的中位数位置有两个
        double chu = 2.0;//最终的除数,如果最终元素个数是偶数需要除2
        if((m+n)%2!=0){//如果是奇数个元素,只有一个中位数,除数是1
            mid2 = -1;//标志不用考虑第二个中位数
            chu = 1;
        }
        int midnum1 = 0;//第一个中位数
        int midnum2 = 0;//第二个中位数,没有就是0
        int nums1Index = 0,nums2Index = 0;//第一个数组和第二个数组的下标
        int num = 0;//辅助变量,记录当前遍历的元素
        for(int i = 0;i<=mid1;i++){//遍历中位数(m+n)/2次
            if(nums2Index>=n || (nums1Index < m && nums1[nums1Index]<=nums2[nums2Index])) {
                num = nums1[nums1Index++];
            }
            else if(nums2Index<n){
                num = nums2[nums2Index++];
            }
            if(i==mid1) midnum1 = num;//如果是中位数就赋值
            if(mid2!=-1 &&i==mid2) midnum2 = num;//如果需要第二个中位数也赋值
        }
        return (midnum1+midnum2)/chu;
    }
    //时间复杂度O(min(m,n))空间复杂度O(1)
    // public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    //     if (nums1.length > nums2.length) {
    //         return findMedianSortedArrays(nums2, nums1);
    //     }

    //     int m = nums1.length;
    //     int n = nums2.length;
    //     int left = 0, right = m;
    //     // median1:前一部分的最大值
    //     // median2:后一部分的最小值
    //     int median1 = 0, median2 = 0;

    //     while (left <= right) {
    //         // 前一部分包含 nums1[0 .. i-1] 和 nums2[0 .. j-1]
    //         // 后一部分包含 nums1[i .. m-1] 和 nums2[j .. n-1]
    //         int i = (left + right) / 2;
    //         int j = (m + n + 1) / 2 - i;

    //         // nums_im1, nums_i, nums_jm1, nums_j 分别表示 nums1[i-1], nums1[i], nums2[j-1], nums2[j]
    //         int nums_im1 = (i == 0 ? Integer.MIN_VALUE : nums1[i - 1]);
    //         int nums_i = (i == m ? Integer.MAX_VALUE : nums1[i]);
    //         int nums_jm1 = (j == 0 ? Integer.MIN_VALUE : nums2[j - 1]);
    //         int nums_j = (j == n ? Integer.MAX_VALUE : nums2[j]);

    //         if (nums_im1 <= nums_j) {
    //             median1 = Math.max(nums_im1, nums_jm1);
    //             median2 = Math.min(nums_i, nums_j);
    //             left = i + 1;
    //         } else {
    //             right = i - 1;
    //         }
    //     }

    //     return (m + n) % 2 == 0 ? (median1 + median2) / 2.0 : median1;
    // }

    //时间复杂度O(max(m,n)),空间复杂度O(m+n)
    // public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
    //     int m = nums1.length;
    //     int n = nums2.length;
    //     int[] resultArr = new int[m+n];
    //     if(m == 0 || n==0)
    //         mergeTheExcess(resultArr,nums1,nums2,0,0, 0);
    //     else
    //         merge(resultArr,nums1,nums2,0,0,0);
    //     int len = resultArr.length;
    //     if(len%2==0){
    //         int i = resultArr[len/2-1];
    //         int j = resultArr[len/2];
    //         return (i+j)/2.0;
    //     }else{
    //         return resultArr[len/2];
    //     }
    // }

    // private static void merge(int[] resultArr,int[] nums1,int[] nums2,int i,int j,int resultArrIndex){
    //     if(i==nums1.length || j==nums2.length) return;
    //     if(nums1[i]<=nums2[j]){
    //         resultArr[resultArrIndex++] = nums1[i++];
    //         merge(resultArr,nums1,nums2,i,j, resultArrIndex);
    //     }else{
    //         resultArr[resultArrIndex++] = nums2[j++];
    //         merge(resultArr,nums1,nums2,i,j, resultArrIndex);
    //     }
    //     mergeTheExcess(resultArr,nums1,nums2,i,j, resultArrIndex);
    // }
    // private static void mergeTheExcess(int[] resultArr,int[] nums1,int[] nums2,int i,int j,int resultArrIndex){
    //     if(i==nums1.length){
    //         while(j<nums2.length){
    //             resultArr[resultArrIndex++] = nums2[j++];
    //         }
    //     }
    //     if(j==nums2.length){
    //         while(i<nums1.length){
    //             resultArr[resultArrIndex++] = nums1[i++];
    //         }
    //     }
    // }

    //时间复杂度O(log(m+n)),空间复杂度O(1)
    // public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    //     int length1 = nums1.length, length2 = nums2.length;
    //     int totalLength = length1 + length2;
    //     if (totalLength % 2 == 1) {
    //         int midIndex = totalLength / 2;
    //         double median = getKthElement(nums1, nums2, midIndex + 1);
    //         return median;
    //     } else {
    //         int midIndex1 = totalLength / 2 - 1, midIndex2 = totalLength / 2;
    //         double median = (getKthElement(nums1, nums2, midIndex1 + 1) + getKthElement(nums1, nums2, midIndex2 + 1)) / 2.0;
    //         return median;
    //     }
    // }

    // public int getKthElement(int[] nums1, int[] nums2, int k) {
    //     /* 主要思路:要找到第 k (k>1) 小的元素,那么就取 pivot1 = nums1[k/2-1] 和 pivot2 = nums2[k/2-1] 进行比较
    //      * 这里的 "/" 表示整除
    //      * nums1 中小于等于 pivot1 的元素有 nums1[0 .. k/2-2] 共计 k/2-1 个
    //      * nums2 中小于等于 pivot2 的元素有 nums2[0 .. k/2-2] 共计 k/2-1 个
    //      * 取 pivot = min(pivot1, pivot2),两个数组中小于等于 pivot 的元素共计不会超过 (k/2-1) + (k/2-1) <= k-2 个
    //      * 这样 pivot 本身最大也只能是第 k-1 小的元素
    //      * 如果 pivot = pivot1,那么 nums1[0 .. k/2-1] 都不可能是第 k 小的元素。把这些元素全部 "删除",剩下的作为新的 nums1 数组
    //      * 如果 pivot = pivot2,那么 nums2[0 .. k/2-1] 都不可能是第 k 小的元素。把这些元素全部 "删除",剩下的作为新的 nums2 数组
    //      * 由于我们 "删除" 了一些元素(这些元素都比第 k 小的元素要小),因此需要修改 k 的值,减去删除的数的个数
    //      */

    //     int length1 = nums1.length, length2 = nums2.length;
    //     int index1 = 0, index2 = 0;
    //     int kthElement = 0;

    //     while (true) {
    //         // 边界情况
    //         if (index1 == length1) {
    //             return nums2[index2 + k - 1];
    //         }
    //         if (index2 == length2) {
    //             return nums1[index1 + k - 1];
    //         }
    //         if (k == 1) {
    //             return Math.min(nums1[index1], nums2[index2]);
    //         }
            
    //         // 正常情况
    //         int half = k / 2;
    //         int newIndex1 = Math.min(index1 + half, length1) - 1;
    //         int newIndex2 = Math.min(index2 + half, length2) - 1;
    //         int pivot1 = nums1[newIndex1], pivot2 = nums2[newIndex2];
    //         if (pivot1 <= pivot2) {
    //             k -= (newIndex1 - index1 + 1);
    //             index1 = newIndex1 + 1;
    //         } else {
    //             k -= (newIndex2 - index2 + 1);
    //             index2 = newIndex2 + 1;
    //         }
    //     }
    // }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
【困难】力扣算法题解析LeetCode4:寻找两个正序数组的中位数 本文解决了在两个有序数组中寻找中位数的问题,要求在O(log(m+n))时间复杂度内完成。核心思路是将问题转化为寻找第k小的数,通过二分查找每次排除k/2个元素。实现时始终保持nums1为较短的数组以优化效率,处理各种边界情况,并动态更新查找范围。代码采用Java实现,包含详细注释和复杂度分析(O(log(min(m,n))))。测试用例覆盖了数组为空、元素相同、交叉数组等边界情况,确保算法正确性。 阅读详情

相关推荐

从零到一:基于GeneMark-ES/ET的新基因组注释实战指南

本文提供了一份基于GeneMark-ES/ET的新基因组注释实战指南。详细介绍了从环境搭建、数据准备到核心运行的全流程,重点解析了ES(从头预测)与ET(结合RNA-Seq证据)两种模式的选择与操作,并分享了Perl模块依赖、并行处理等常见问题的解决方案,帮助生物信息学研究者高效完成基因预测工作。

weixin_29266647的博客 209

java数据结构与算法刷题-----LeetCode21:合并两个有序链表

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846 思路分析 现在有两个链表,我们要将其合并为一个 最好不要改变原有链表,也就是最终合并结果,使用新的链表来保存 可以采用双指针的思路,而链表本身就是一个指针(指向自己并且保存自己的下一个元素) 所以,我们对比两个指针的值,小的就插入到新链表中...

殷志鹏的博客 1234

从URDF到Gazebo:一个完整的ROS2机械臂仿真项目实战与避坑指南

本文提供了一个完整的ROS2机械臂仿真项目实战指南,详细讲解了从URDF建模、ROS2 Control配置、MoveIt2集成到Gazebo仿真的全流程。文章重点分享了URDF惯性参数设置、Gazebo插件选择、MoveIt2配置修正等关键步骤的避坑经验,帮助开发者快速搭建可用的六轴机械臂仿真环境,实现从静态模型到物理仿真的跨越。

weixin_29279153的博客 275

删除重复的电子邮箱

1、问题描述 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。 2、 创建表格 代码 create table if not exists Person(Id varchar(8), Email varchar(255)); delete * from Person where 1=1; // truncate table Person; insert into Person (Id, Email) values( '1', 'john@ex

qq_45793102的博客 236

同物种,不同版本之间的坐标转化

是最常用的工具,如果有可用的链文件,这通常是最便捷的方法。CrossMap是一个功能强大的替代工具,支持多种文件格式和物种。自定义生成链文件适用于没有现成资源的情况,虽然复杂一些,但可以满足特定需求。Ensembl 和 Gramene提供的工具适用于支持的物种,尤其在植物基因组领域可能更具优势。选择合适的方法取决于你正在处理的物种、基因组版本以及现有的资源。

qq_40256654的博客 1853

科研党必备:Python脚本批量下载DOI文献的保姆级教程(附避坑指南)

本文为科研人员提供了一份详细的Python脚本批量下载DOI文献的教程,涵盖环境配置、核心功能实现、性能优化及常见问题解决。通过自动化脚本,研究者可高效完成文献批量下载,显著提升科研工作效率,特别适合需要处理大量文献的研究团队使用。

weixin_26965807的博客 479

Java求回文数的两种巧妙方法---LeetCode9 回文数

Java求回文数两种巧妙方法详解

Forever_xxx的博客 1454

Win10/Win11系统下,用VSCode编译Betaflight固件最全避坑指南(从GCC安装到HEX生成)

本文详细介绍了在Win10/Win11系统下使用VSCode编译Betaflight固件的完整流程,包括GCC安装、环境变量配置、终端选择、Make工具安装等关键步骤,帮助开发者避开常见陷阱,高效生成HEX文件。特别针对VSCode环境优化和编译错误排查提供了实用解决方案。

weixin_42557803的博客 416

牛客Top200---最长回文字符串(java)

题目 题解:中心扩展法 描述:遍历,从左到右遍历,然后向两端扩展 假设每个字符都是回文串最中心的字符,从中心字符向两边扩展,若左右字符不同则他就不会是回文串。 回文字符串需要分情况考虑,分奇偶两种情况,为奇数是i==i,然后向两边扩展,当为偶数时,先判断 i ==i+1 字符是否一样,一样则向两边扩展,否则他就不可能是回文串。 最后回文长度就是right - left -1,这个可以举两个例子 import java.util.*; public class Solution { publi

小样yx的博客 1961

Three.js 完整实战项目:构建一个 3D 商品展示空间

Three.js 作为强大的 WebGL 框架,广泛应用于交互式 3D 场景开发,尤其适合创建沉浸式商品展示空间。本文将通过一个完整的实战项目,展示如何构建一个 3D 商品展示空间,涵盖项目架构、资源组织、多模型切换、交互热点绑定、移动端适配和帧率优化。项目以展示虚拟商品(如家具或电子产品)为核心,结合用户交互,基于 Vite、TypeScript 和 Tailwind CSS,支持 ES Modules,确保响应式布局,遵循 WCAG 2.1 可访问性标准。本文适合希望通过综合项目掌握 Three.js

zimin的专栏 1465

2025.05.28【读书笔记】|如何用SILVA和RFAM数据库高效去除rRNA污染

摘要: 在Ribo-seq等测序数据分析中,清除rRNA污染对结果准确性至关重要。仅使用SILVA数据库可能遗漏5S rRNA污染,建议结合RFAM数据库(特别是RF00001家族)全面清除。操作要点包括:下载两库序列、将RNA碱基U替换为DNA的T、合并序列建立索引,使用bowtie2过滤rRNA reads。注意U/T转换是关键,否则会导致比对失败。该方法能有效提升数据清洁度,为后续分析奠定基础。

980

java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

1. 回文串作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba、bbaabb。这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的字符数是偶数。前面举的abcdcba就是奇回文,bbaabb就是偶回文。判断一个字符串是否是回文串很简单,只要从字符串的两端开始往中间扫描,全部匹配成功则是回文串,只要有一次匹配失败,那么就不是回文串。...

weixin_27130513的博客 619

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode第四题:寻找两个正序数组的中位数(Java)

题目:寻找两个正序数组的中位数 给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。 示例: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 方法一:合并成一个数组,找中间数。 不考虑最优解的情况下,第一反应就是这个思路。 public static double findMedianSortedArrays(int[] num...

巨坑的菜比的博客 4668

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

4. 寻找两个正序数组的中位数-LeetCode(Java)

寻找两个正序数组的中位数-LeetCode(Java)   ​ 寻找两个正序数组的中位数-LeetCode(Java) 题目:4. 寻找两个正序数组的中位数 给定两 分析:     1.暴力解法      (1)思路:      (2)代码:     2.进阶:归并排序      (1)思路:      (2)代码:     3.二分查找      (1)思路:      (2)代码      4.划分数组      (1)思路:      (2)代码

m0_60416689的博客 1617

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode - 4 寻找两个正序数组的中位数

题目来源 4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。 示例 1 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2 输入:nums1 = [1,2], nums2 = [3,4]

优快云 1075

leetcode刷题记录(九十四)——4. 寻找两个正序数组的中位数

4. 寻找两个正序数组的中位数 - 力扣(LeetCode)4. 寻找两个正序数组的中位数 - 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数。算法的时间复杂度应该为 O(log (m+n))。

weixin_45994787的博客 895

【LeetCode 题解】算法:4.寻找两个正序数组的中位数

今天,我们将目光聚焦于 LeetCode 平台上一道极具代表性的题目:如何运用 Java 语言,精确找出两个正序数组的中位数,并且要将算法的时间复杂度严格控制在 (O(log (m + n)))

小高的博客 809

leetcode4:寻找两个正序数组的中位数

寻找两个正序数组的中位数

Zhuxiaoyu_91的博客 1061

[leetcode] 4.寻找两个正序数组的中位数

[leetcode] 4.寻找两个有序数组的中位数

lvhao123456789的博客 1231

LeetCode 4:寻找两个正序数组的中位数

给定两个有序(升序)数组 和 ,要求找到它们的中位数,且算法时间复杂度为 ( 和 分别是两个数组的长度)。中位数定义:若直接合并两个数组(时间复杂度 ),虽能解决问题,但无法满足题目对时间复杂度的严格要求()。因此,必须利用数组有序的特性,通过 二分查找 避免完全合并。中位数的本质是将合并后的数组划分为左右两部分,使得:对于两个有序数组,我们可以通过二分查找分割点,将 和 分别划分为左右两部分,使得:为了减少二分查找的范围,确保 是较短的数组(若 更长,则交换 和 )。这样,二分查找仅需在较短

m0_75126572的博客 854

leetcode题解-4.寻找两个正序数组的中位数(Java)

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数。算法的时间复杂度应该为 O(log (m+n))。

2301_80244610的博客 1383

LeetCode 004. 寻找两个正序数组的中位数 - 二分切分与分治详解

题目描述:给定两个已按非降序排列的整数数组 nums1、nums2,设它们长度分别为 m 和 n,要求返回这两个数组合并后有序序列的中位数。整体期望时间复杂度为 O(log(m+n))。当总长度为偶数时,中位数为中间两个数的平均值(返回 double)。数组可能为空,但不会同时为空(若实现中遇到同时为空需返回默认值)。原题链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/难度等级:Hard。

m0_52114506的博客 1044

【leetcode】4.寻找两个正序数组的中位数(二分查找,划分数组等多种方法,java实现)

4. 寻找两个正序数组的中位数 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 方法一:二分查找 用一个例子说明上述

Viper的程序员修炼手册 2898

力扣第4题:寻找两个正序数组的中位数

学习目标: 力扣4. 寻找两个正序数组的中位数 学习内容: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2: 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合

童一的博客 314

Java版LeetCode热题100之寻找两个正序数组的中位数:从暴力到最优解的全面解析

问题转化:中位数 → 第 k 小元素;排除法:每次排除k/2个不可能的元素;划分思想:通过数学性质直接定位中位数;边界处理:用极值和越界检查确保鲁棒性。“寻找两个正序数组的中位数”是一道集数学洞察算法技巧和工程实现于一体的经典难题。它不仅考察你对二分查找的掌握,更检验你在面对复杂约束时的问题转化能力。正如计算机科学家 Niklaus Wirth 所言:“算法 + 数据结构 = 程序。” 本题正是这一公式的完美体现——通过精巧的算法设计,在不改变数据结构的前提下,实现了理论最优的时间复杂度。✨。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 963
上一篇: java数据结构与算法刷题-----LeetCode3:无重复字符的最长子串
下一篇: java数据结构与算法刷题-----LeetCode5:最长回文子串
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值