【LeetCode 热题 100】(五)普通数组

力扣热题100刷题笔记[python] 力扣100刷题题解 阅读详情

53. 最大子数组和

class Solution {
    public int maxSubArray(int[] nums) {
        int length = nums.length;
        if(length == 1){
            return nums[0];
        }
        // 1.定义全局最大和
        int ans = nums[0];
        int pre = 0;
        for (int i = 0; i < nums.length; i++) {
            pre = Math.max(nums[i], nums[i] + pre);
            ans = Math.max(ans, pre);
        }  
        return ans;
    }
}

解题思路:动态规划(Kadane算法)

问题分析

寻找数组中连续子数组的最大和(至少包含一个元素)。例如:[-2,1,-3,4,-1,2,1,-5,4] 的最大子数组和为 6(子数组 [4,-1,2,1])。

核心算法:动态规划
  1. 状态定义:

    • pre:表示以当前元素结尾的最大子数组和
    • ans:记录全局最大子数组和
  2. 状态转移方程:

    pre = Math.max(nums[i],         // 选项1:从当前元素重新开始
                  nums[i] + pre)    // 选项2:延续前面的子数组
    ans = Math.max(ans, pre)        // 更新全局最大值
    
  3. 算法流程:

    graph TD
    A[初始化 ans=nums[0], pre=0] --> B[遍历数组]
    B --> C{计算以nums[i]结尾的最大和}
    C --> D[选择1:独立子数组 nums[i]]
    C --> E[选择2:延续前序子数组 nums[i]+pre]
    D --> F[取较大值更新pre]
    E --> F
    F --> G[更新全局最大值ans]
    G --> B
    
关键步骤解析
  1. 初始化:

    • ans = nums[0](至少包含一个元素)
    • pre = 0(初始无前序子数组)
  2. 遍历数组:

    • 对每个元素 nums[i] 计算:
      • 选择1:以当前元素作为新起点(nums[i])
      • 选择2:将当前元素加入前序子数组(nums[i] + pre)
    • 取两者较大值更新 pre
    • 用 pre 更新全局最大值 ans
  3. 终止条件:

    • 遍历完成后返回 ans
时间复杂度
  • O(n):仅需一次遍历数组
  • 空间复杂度 O(1):仅用常数空间存储状态
示例演算(nums = [-2,1,-3,4,-1,2,1])
inums[i]决策preans
0-2max(-2, 0-2) = -2-2-2
11max(1, -2+1) = 111
2-3max(-3, 1-3) = -2-21
34max(4, -2+4) = 444
4-1max(-1, 4-1) = 334
52max(2, 3+2) = 555
61max(1, 5+1) = 666

最终结果:6(子数组 [4,-1,2,1])

算法优势
  1. 高效处理负值:

    • 当 pre 为负时自动重置子数组(Math.max(nums[i], nums[i]+pre))
    • 避免负值拖累后续子数组和
  2. 实时更新:

    • 在遍历过程中即时计算最大值
    • 无需额外存储空间
  3. 边界处理:

    • 单元素数组直接返回该元素
    • 全负数数组返回最大负数
典型应用场景
  1. 股票买卖(最大利润区间)
  2. 信号处理(最大连续波形)
  3. 数据分析(最大收益区间)

此算法由Joseph Born Kadane提出(1984),是解决最大子数组问题的最优方案,体现了动态规划的核心思想:利用历史状态避免重复计算。

56. 合并区间

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals.length == 0){
            int[][] ints = new int[0][2];
            return ints;
        }

        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];
            }
        });
        ArrayList<int[]> merged = new ArrayList<>();
        for (int i = 0; i < intervals.length; i++) {
            int L = intervals[i][0], R = intervals[i][1];
            if(merged.size()==0 || merged.get(merged.size() - 1)[1] < L){
                merged.add(new int[]{L,R});
            }else{
                merged.get(merged.size()-1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);
            }
        }
        int[][] ints1 = merged.toArray(new int[merged.size()][]);
        return ints1;
    }
}

解题思路:区间合并算法

核心思想

通过排序和线性扫描合并重叠区间,将多个可能重叠的区间合并为互不重叠的区间集合。

关键步骤
  1. 边界处理:

    • 当输入为空数组时,直接返回空二维数组
    if(intervals.length == 0){
        return new int[0][2];
    }
    
  2. 区间排序:

    • 按照区间左端点升序排序
    Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
    
  3. 合并重叠区间:

    graph TD
    A[开始遍历区间] --> B{是否第一个区间 或<br>当前左端点 > 上一个右端点?}
    B -- 是 --> C[添加新区间]
    B -- 否 --> D[合并区间]
    C --> E[继续遍历]
    D --> E
    E --> F[遍历结束]
    
  4. 具体合并逻辑:

    • 初始化存储合并结果的列表 merged
    • 遍历每个区间:
      for (int i = 0; i < intervals.length; i++) {
          int L = intervals[i][0], R = intervals[i][1];
          // 不重叠情况
          if(merged.isEmpty() || lastRight < L) {
              merged.add(new int[]{L, R});
          } 
          // 重叠情况
          else {
              lastRight = Math.max(lastRight, R);
          }
      }
      
算法特点
  1. 时间复杂度:O(n log n)

    • 排序消耗 O(n log n)
    • 合并扫描消耗 O(n)
  2. 空间复杂度:O(n)

    • 存储合并结果需要额外空间
  3. 关键优势:

    • 处理任意数量区间
    • 正确处理全包含/部分重叠/边界相接等情况
    • 结果区间有序且不重叠
示例解析(输入:[[1,3],[2,6],[8,10],[15,18]])
当前区间合并状态操作说明
[1,3][]添加初始状态
[2,6][[1,3]]合并3≥2 → 更新为[1,6]
[8,10][[1,6]]添加6<8 → 无重叠
[15,18][[1,6],[8,10]]添加10<15 → 无重叠

输出:[[1,6],[8,10],[15,18]]

处理各种重叠情况
  1. 完全包含:[[1,4],[2,3]] → [[1,4]]
  2. 部分重叠:[[1,3],[2,4]] → [[1,4]]
  3. 边界相接:[[1,2],[2,3]] → [[1,3]]
  4. 多重重叠:[[1,4],[2,5],[3,6]] → [[1,6]]

算法应用场景

  1. 日程安排合并
  2. 资源占用时间段优化
  3. 交通线路区间合并
  4. 任何需要处理重叠时间段的问题

该算法通过排序+单次扫描的巧妙设计,高效解决了区间合并问题,是处理这类问题的标准解法。

199. 轮转数组

class Solution {
    public void rotate(int[] nums, int k) {
        int length = nums.length;
        int[] arr = new int[length];
        for (int i = 0; i < nums.length; i++) {
            arr[(i+k)%length] = nums[i];
        }

        for (int i = 0; i < arr.length; i++) {
            nums[i] = arr[i];
        }

    }
}

这段代码实现了数组的旋转功能,即将数组元素向右移动 k 个位置。以下是代码的解题思路详解:

解题思路

  1. 问题分析:

    • 向右旋转数组 k 次意味着每个元素会移动到其右侧 k 个位置后的新位置。
    • 若移动位置超出数组末尾,元素会循环移动到数组开头(例如,末尾元素移动后可能出现在数组头部)。
    • 关键点:新位置 = (原位置 + k) % 数组长度,取模操作确保循环移动。
  2. 核心算法:

    • 临时数组辅助:创建一个与原数组等长的临时数组 arr。
    • 计算新位置:遍历原数组,将每个元素 nums[i] 放入临时数组的 (i + k) % length 位置。
    • 复制回原数组:将临时数组的内容复制回原数组 nums。
  3. 处理大 k 值:

    • 当 k 大于数组长度时,实际有效移动次数为 k % length(例如,数组长度为 7,k=10 等价于 k=3)。
    • 代码中的 (i+k)%length 自动处理了这种情况,无需单独调整 k。
  4. 示例说明:

    • 假设 nums = [1, 2, 3, 4, 5], k = 2:
      • 长度 length = 5。
      • 计算新位置:
        • i=0: (0+2)%5 = 2 → arr[2] = 1
        • i=1: (1+2)%5 = 3 → arr[3] = 2
        • i=2: (2+2)%5 = 4 → arr[4] = 3
        • i=3: (3+2)%5 = 0 → arr[0] = 4
        • i=4: (4+2)%5 = 1 → arr[1] = 5
      • 结果:arr = [4, 5, 1, 2, 3],复制回 nums 完成旋转。

代码特点

  • 时间复杂度:O(n),遍历数组两次(一次填充临时数组,一次复制回原数组)。
  • 空间复杂度:O(n),使用了一个临时数组。
  • 优点:逻辑清晰,直观体现旋转的本质(位置映射)。
  • 改进点:若要求空间复杂度 O(1),可使用反转法(先整体反转,再分段反转)。

关键代码解释

public void rotate(int[] nums, int k) {
    int length = nums.length;
    int[] arr = new int[length]; // 创建临时数组
    for (int i = 0; i < length; i++) {
        arr[(i + k) % length] = nums[i]; // 元素移动到新位置
    }
    for (int i = 0; i < length; i++) {
        nums[i] = arr[i]; // 复制回原数组
    }
}

此方法通过位置映射公式高效解决了数组旋转问题,适合理解旋转的本质逻辑。

238. 除自身以外数组的乘积

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int length = nums.length;
        int[] left = new int[length];
        int[] right = new int[length];
        int[] answer = new int[length];
        // 1. 获取左边的累积
        left[0] = 1;
        for (int i = 1; i < length; i++) {
            left[i] = nums[i-1] * left[i-1];
        }
        
        // 2. 获取右边的累积
        right[length-1] = 1;
        for (int i = length-2; i >= 0; i--) {
            right[i] = nums[i+1]*right[i+1];
        }

        for (int i = 0; i < length; i++) {
            answer[i] = left[i] * right[i];
        }      
        return answer;
    }
}

解题思路描述

这段代码实现了 “除自身以外数组的乘积” 问题。给定一个整数数组 nums,要求返回一个新数组 answer,其中 answer[i] 等于 nums 中除 nums[i] 之外所有元素的乘积。代码满足以下约束:

  • 不能使用除法(避免除以零问题并符合题目要求)。
  • 时间复杂度为 O(n)(高效的单次遍历)。
  • 空间复杂度为 O(n)(使用额外数组,但非原地修改输入)。
核心思想:分解问题

将每个位置的答案拆分为两部分:

  1. 左侧所有元素的乘积(left[i]):索引 0 到 i-1 的累积乘积。
  2. 右侧所有元素的乘积(right[i]):索引 i+1 到 n-1 的累积乘积。
    最终结果即为两者的乘积:answer[i] = left[i] * right[i]。
步骤详解
  1. 初始化数组:

    • left[]:存储每个位置左侧的累积乘积。
    • right[]:存储每个位置右侧的累积乘积。
    • answer[]:存储最终结果。
  2. 计算左侧乘积(从左向右遍历):

    • 起始点:left[0] = 1(第一个元素左侧无元素)。
    • 递推公式:left[i] = nums[i-1] * left[i-1]。
    • 意义:left[i] 表示 nums[0] × nums[1] × ... × nums[i-1]。
    • 示例:若 nums = [1, 2, 3, 4],则 left = [1, 1×1=1, 2×1=2, 3×2=6]。
  3. 计算右侧乘积(从右向左遍历):

    • 起始点:right[length-1] = 1(最后一个元素右侧无元素)。
    • 递推公式:right[i] = nums[i+1] * right[i+1]。
    • 意义:right[i] 表示 nums[i+1] × nums[i+2] × ... × nums[n-1]。
    • 示例:nums = [1, 2, 3, 4],则 right = [2×3×4=24, 3×4=12, 4×1=4, 1]。
  4. 合并结果:

    • 对每个索引 i,计算 answer[i] = left[i] * right[i]。
    • 意义:左侧乘积 × 右侧乘积 = 排除 nums[i] 的总乘积。
    • 示例:i=1 时,answer[1] = left[1] × right[1] = 1 × 12 = 12(即 1×3×4)。
为什么有效?
  • 避免除法:通过分解为左右两部分,无需除法操作。
  • 时间复杂度 O(n):三次独立遍历(左、右、合并),每次 O(n)。
  • 空间复杂度 O(n):使用 left 和 right 两个辅助数组(各长度 n)。
示例演算

以 nums = [1, 2, 3, 4] 为例:

步骤索引 0索引 1索引 2索引 3
left[] 计算left[0]=1left[1]=nums[0]×left[0]=1×1=1left[2]=nums[1]×left[1]=2×1=2left[3]=nums[2]×left[2]=3×2=6
right[] 计算right[0]=nums[1]×right[1]=2×12=24right[1]=nums[2]×right[2]=3×4=12right[2]=nums[3]×right[3]=4×1=4right[3]=1
answer[] 结果1×24=241×12=122×4=86×1=6
最终 answer = [24, 12, 8, 6](即 [2×3×4, 1×3×4, 1×2×4, 1×2×3])。
LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵 一、子串 二、普通数组 三、矩阵 阅读详情

相关推荐

LeetCode 热题100题解(Java版本)

使用HashMap,遍历数组,判断当前元素的“补数”是否存在,如果存在直接返回结果,否则在Map中记录当前元素及其下标。 2、字母异位词分组 3、最长连续序列 先使用HashSet去重,如果对当前元素x存在x-1,那么肯定从x-1开始算序列长度会更长,所以当x-1存在时,就跳过x,去计算x-1。 二、双指针 1、移动零 不用双指针,先将非0数重新放入nums,最后放入0。 2、盛最多水的容器 3、三数之和 排序+双指针 4、接雨水 三、滑动窗口 1、无重复字符的最长子串 如果

编程小鹏的博客 2102

【leetCode力扣热题100(五)——普通数组】适合入门·Python代码及详细解析(持续更新)

注:除特殊说明我写的和引用标记外,代码来源均为力扣官方。

m0_73872643的博客 1030

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1909

LeetCode 热题100(五)【普通数组】

4.若result.back()[1] >= intervals[i][0] ,则说明存在重叠区间,result.back()[1] = max (result.back()[1], intervals[i][1]);1.建立dp数组vector<int> dp(n, 0),dp[i]表示以nums[i]结尾的最大子数组和,因此max(dp[0],...,dp[n-1])即为我们所求的答案。如nums=[1,2,3,5,4],返回6。以[[1,3],[8,10],[2,6],[15,18]]为例。

jrrz0828的博客 1181

数电实验,如何安装Quartus II软件?

数电实验第一步,安装软件Quartus II! 安装这个软件可以说是很折磨我了,依然是failed很多次之后终于可以了! 能成功安装,多亏了网络上的各路大神!!!不胜感激 现在分享经验如下: ps:我分享的是Quartus II 14.0版本的软件及破解器安装使用方法 注意!想要在电脑上顺利安装,前提条件是电脑有10G以上内存!!! 友情提示:建议整个下载过程中,提前关掉所有杀毒、电脑

一个程序媛的成长记录❤ 3652

Howland电流源电路:从理论到实践的深度解析与优化策略

本文深度解析了Howland电流源电路的工作原理,从经典四电阻架构的“虚短”“虚断”分析,到其实现宽带恒流输出的理论优势。重点剖析了实践中因电阻精度、运放参数及PCB布局导致的性能瓶颈,并提供了引入第五电阻、优化运放选型等关键优化策略,旨在将输出阻抗从kΩ级提升至MΩ级,以满足精密测量与传感器驱动等应用需求。

weixin_29243063的博客 441

力扣热题100(方便自己复习,自用)

热题一百

LXY999222的博客 6281

微信小程序 - 最新详细实现 “餐厅食堂外卖点餐“ 全屏左右联动菜单列表功能界面,附带搜索框、购物车功能、商品加减计算金额、折扣等,左侧商品分类,右侧列表数据,仿美团饿了么外卖点餐页面,饭店扫码点餐!

微信小程序,vue2,vue3,左右联动菜单,商品分类页面,点餐界面,美团外卖点餐,左右布局界面,饿了么点餐页面,左分类右列表,小程序实现左侧菜单,外卖点餐联动,锚点,点击左侧大类后侧列表跟着变跟着刷新,菜单左右联动效果,左菜单右边列表数据,uniapp,左侧菜单,右侧列表双向联动效果,右侧商品滑动时,右侧列表双向联动效果,侧边菜单和右边滚动条,电商项目,购物车,商品加减计算,外卖选餐页面带购物车计算,自动计算金额,微信小程序外卖点餐界面源码,店铺页面滑动左右联动,点餐类小程序界面,堂食,扫码点餐,餐饮行业

🏆 前端领域优质创作者 5157

力扣热题 100:普通数组专题五道题详细解析(JAVA)

今天,我们就来详细解析热题 100 中与普通数组相关的五道题,帮助大家更好地理解解题思路和技巧。以上就是力扣热题 100 中与普通数组相关的五道题的详细解析,希望对大家有所帮助。我们可以使用哈希表来记录数组中出现的正整数,然后从 1 开始遍历,找到第一个未出现在哈希表中的正整数。我们可以先对区间列表按照区间的起始位置进行排序,然后遍历排序后的区间列表,合并重叠的区间。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。,请你合并所有重叠的区间,并返回合并后的区间列表。

m0_72686196的博客 1606

RNA-seq分析:Step8(富集分析)

RNA-seq富集分析是一种用于分析基因表达数据中特定基因或通路是否富集的分析方法。其基本思想是比较不同基因对应的转录本/基因之间的表达差异及其对应的基因注释信息,通过统计学方法评估差异的显著性,从而确定是否存在某些特定的功能通路或基因集合富集的情况。常用的RNA-seq富集分析工具包括GOseq、KEGG(KEGG enrichment analysis)、DAVID(Database for Annotation, Visualization and Integrated Discovery)等。这

沉香best的博客 3633

共享单车数据抓取与分析:使用Python爬虫抓取共享单车使用数据与地图信息

通过本篇博客,我们展示了如何使用Python爬虫抓取共享单车的使用数据和地图信息,并通过简单的数据分析得出有价值的见解。在实际应用中,数据的收集与分析不仅能帮助城市管理者更好地规划单车站点,还能为用户提供更精准的单车使用体验。未来,我们可以将此分析与机器学习模型相结合,进一步预测单车的使用趋势,优化调度算法,实现更加智能的共享单车管理。

2201_76125261的博客 2204

《LeetCode 热题 100》整整 100 题量大管饱题解套餐 上

《LeetCode 热题 100》整整 100 题量大管饱题解套餐

Lenyiin 3585

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

本文详细介绍了一个基于YOLOv5/v6/v7/v8的体育赛事目标检测系统的设计与实现。系统采用先进的深度学习算法,结合PySide6图形界面,实现了对体育赛事中运动员、球类、裁判等多种目标的实时检测与跟踪。本文将全面阐述系统的架构设计、算法原理、训练流程、界面实现以及实际应用效果,并提供完整的代码实现。

YOLO 509

力扣刷题Hot100之普通数组

比如7个数k=3 由[0,1,2,3,4,5,6]->[6,5,4,3,2,1,0]->[4,5,6,0,1,2,3]比较(x+nums[i],nums[i])记录当前最大和,并且比较(x,max)记录数组最大和,遍历得到结果。如果先(0,2)(3,6)数组就是[2,1,0,6,5,4,3]->[3,4,5,6,0,1,2]其实反推很好想出来,假如每次循环一次就返回到原点那循环到k-1就结束,最小公约数为k。利用动态规划解决,遍历数组,用变量x记录前一位的最大和,max为数组最大和。

weixin_74567525的博客 1741

PLC如何控制电子膨胀阀(暖通空调/制冷系统)

电子膨胀在冷水机空调系统里广泛采用,大部分空调系统都会有电子膨胀阀,但是电子膨胀阀的控制接口和普通电磁阀完全不同,所以想要PLC直接控制电子膨胀阀,还是比较麻烦的,电子膨胀阀可以理解为一个简易步进电机,体积非常小,线圈和转子部分可以分离。下面我们看下PLC如何控制电子膨胀阀。

RXXW_Dor的博客 4759

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

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

刷题汇总(五)leetcode 热题 HOT 100 C++ 答案总结

1、两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] clas...

zhoujie1994的博客 8134

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

力扣热题 100:技巧专题经典题解析

异或运算的性质是:一个数异或自己为 0,一个数异或 0 为自己。因此,遍历数组,将所有元素异或在一起,最终结果就是只出现一次的数字。我们可以维护一个候选元素和其计数,遍历数组,如果当前元素与候选元素相同,则计数加 1,否则计数减 1。给定一个包含红色、白色和蓝色的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色的顺序排列。遍历数组,根据元素的值交换到相应的位置。给定一个包含 n + 1 个整数的数组,其中每个元素在 1 到 n 之间,至少存在一个重复元素。找到那个只出现一次的元素。

m0_72686196的博客 1763

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

力扣热题 100:图论专题经典题解析

给定一个二维网格,其中 ‘0’ 表示空单元格,‘1’ 表示新鲜橘子,‘2’ 表示腐烂橘子。每分钟,腐烂的橘子会使其上下左右的新鲜橘子腐烂。我们可以遍历网格中的每个元素,当遇到陆地时,将其标记为已访问,并递归或迭代地访问其相邻的陆地,直到所有相连的陆地都被访问过。我们可以将所有腐烂的橘子作为初始节点,同时进行 BFS,逐层腐烂相邻的新鲜橘子。在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。给定一个由 ‘0’(水)和 ‘1’(陆地)组成的二维网格,计算其中岛屿的数量。

m0_72686196的博客 1557

力扣hot100_普通数组_python版本

【代码】力扣hot100_普通数组_python版本。

Y1n的博客 3876

LeetCode 热题 100之普通数组

今天的题目很精彩

qq_43060884的博客 1106

LeetCode热题100plus

(简单)给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。方法一(自己想到):暴力枚举,两次循环遍历所有相加的情况。

qq_43751506的博客 3669

力扣热题 100:栈专题经典题解析

在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。今天,我们就来详细解析栈专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。我们可以使用两个栈,一个用于存储所有元素,另一个用于存储最小值。解释:最大面积的矩形由高度为 5 的柱子和其右侧的柱子形成,宽度为 2,面积为 5 * 2 = 10。我们可以使用两个栈,一个用于存储字符,另一个用于存储数字。给定一个经过编码的字符串,返回其解码后的字符串。,表示一组柱状图的高度,计算能够形成的矩形的最大面积。

m0_72686196的博客 1385

力扣(leetcode)hot 100普通数组看这一篇就够了

这期带来的是关于力扣 hot 100当中关于普通数组这一节的内容。保证看了的人都能够学会

yyyCode的博客 2360

力扣热题100(附刷题表版)

不仅方便查看题目,并且,在完成题目后,,我放在了结尾,大家自取,直接复制粘贴到。2. 字母异位词分组(中等)3. 最长连续序列(中等)1. 两数之和 (简单)时做记录,整理了下面。

2301_79966297的博客 2231

力扣热题100——普通数组(不普通)

力扣中普通数组系列题

weixin_44617849的博客 914

刷题记录(力扣热题100)

因为构成单词的字母相同,那么将单词按同一方法排序后产生的序列一定是相同的,那么再进行哈希也一定是相同的,所以我们此时已经确定了第一维的参数,只需将第二维设置为动态数组,然后根据哈希值进行插入即可,最后遍历哈希表将其整合为一个动态数组返回即可。两个指针从两边出发,算一下当前的体积,然后更新较小的那一条边,因为每次更新x轴都会减少,如果更新长边那么体积只会变小,而更新短边才有变大的机会,然后直到两个指针相遇结束,在此期间维护最大面积即可。给定一个数组在不改变其它元素的相对顺序的情况下,将数组中的0移动到末尾。

qq_51676853的博客 2117
上一篇: 【LeetCode 热题 100】(四)子串
下一篇: 【LeetCode 热题 100】(六)矩阵
夜斗小神社
博客等级 码龄7年 3718粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值