【LeetCode 热题 100】(二)双指针

【leetcode热题100】通配符匹配 给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持和'*''*'判定匹配成功的充要条件是:字符模式必须能够输入字符串(而不是部分匹配)。false"a" 无法匹配 "aa" 整个字符串。true'*' 可以匹配任意字符串。a"false' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。 阅读详情

283. 移动零

class Solution {
    public void moveZeroes(int[] nums) {
        int length = nums.length;
        // 定义双指针 left current
        int left = 0;
        for (int i = 0; i < length; i++) {
            if(nums[i] != 0){
                swap(nums,left,i);
                left = left + 1;
            }
        }
    }

    private static void swap(int[] nums, int left, int i) {
        int temp = nums[left];
        nums[left] = nums[i];
        nums[i] = temp;
    }

}

解题思路

这段代码使用双指针技巧来解决移动零的问题,核心思想是在一次遍历中完成零的移动,同时保持非零元素的相对顺序。以下是详细的解题思路:

  1. 问题分析:

    • 给定一个整数数组,需要将所有零移动到数组末尾。
    • 非零元素必须保持原有顺序。
    • 要求原地操作(不创建新数组)。
  2. 双指针设计:

    • 左指针(left):指向当前已处理序列的末尾(即下一个非零元素应放置的位置)。
    • 右指针(i):遍历数组的指针,用于发现非零元素。
  3. 算法流程:

    • 初始化 left = 0。
    • 遍历数组(i 从 0 到 n-1):
      • 若 nums[i] != 0(发现非零元素):
        • 交换 nums[left] 和 nums[i]。
        • left 右移一位。
    • 遍历结束后,所有零已被移动到数组末尾。
  4. 关键点解释:

    • 保持非零元素顺序:每次交换将非零元素移到 left 位置,left 按顺序递增,确保非零元素按原序排列。
    • 零的移动:非零元素被交换到前面后,零自然被“挤”到后面。
    • 原地操作:仅使用常量额外空间(双指针)。
  5. 示例模拟:

    • 输入:[0, 1, 0, 3, 12]
    • 步骤:
      • i=0:nums[0]=0 → 跳过。
      • i=1:nums[1]=1 → 交换 nums[0] 和 nums[1] → [1, 0, 0, 3, 12], left=1。
      • i=2:nums[2]=0 → 跳过。
      • i=3:nums[3]=3 → 交换 nums[1] 和 nums[3] → [1, 3, 0, 0, 12], left=2。
      • i=4:nums[4]=12 → 交换 nums[2] 和 nums[4] → [1, 3, 12, 0, 0]。

复杂度分析

  • 时间复杂度:O(n)O(n)O(n),仅遍历数组一次。
  • 空间复杂度:O(1)O(1)O(1),仅使用常量空间存储指针。

总结

该解法高效地利用双指针在单次遍历中完成零的移动,同时保持了非零元素的顺序,满足原地操作的要求。核心在于通过交换操作逐步将非零元素前移,零元素自然后移。

11. 盛水做多的容器

class Solution {
    public int maxArea(int[] height) {
        // 1.定义双指针
        int left = 0;
        int right = height.length - 1;
        int max_area = 0;
        // 2.寻找最大的面积
        while (left < right){
            int area = Math.min(height[left],height[right]) * (right - left);
            max_area = Math.max(area, max_area);
            if(height[left] < height[right]){
                left = left + 1;
            }else{
                right = right - 1;
            }
        }
        return max_area;     
    }
}

解题思路:双指针法解决最大容器问题

问题分析:
给定一个表示垂直线高度的数组,需要找到两条垂直线与x轴形成的容器能容纳的最大水量。容器的容量由两个因素决定:

  1. 两条垂直线的距离(底边长度)
  2. 两条垂直线中较短的高度(容器高度)

核心思想:
使用双指针从数组两端向中间扫描,在每次移动中保留较高的垂直线,移动较短的垂直线,从而高效地找到最大容器面积。

算法步骤:

  1. 初始化指针:

    • left 指向数组起始位置(左边界)
    • right 指向数组末尾位置(右边界)
    • max_area 记录最大面积,初始化为0
  2. 双指针扫描:

    • 当 left < right 时循环:
      a. 计算当前面积:
      当前面积 = min(左高度, 右高度) × (右索引 - 左索引)
      b. 更新最大面积:
      比较当前面积与历史最大值
      c. 移动指针:
      • 若左高度 < 右高度 → 左指针右移 (left++)
      • 否则 → 右指针左移 (right--)
  3. 返回结果:
    循环结束后返回记录的最大面积 max_area

移动策略的正确性:

  • 关键理解:容器的容量受限于较短边
  • 移动较高指针:底边长度减小,高度不会增加(仍受限于原较短边),面积必然减小
  • 移动较低指针:虽然底边长度减小,但可能遇到更高的垂直线,从而获得更大面积
  • 该策略确保不会错过可能的更大面积

示例模拟(输入:[1,8,6,2,5,4,8,3,7]):

Step1: [1,8,6,2,5,4,8,3,7]  // 面积=min(1,7)*8=8
        ↑                 ↑   // 1<7 → 左移

Step2: [1,8,6,2,5,4,8,3,7]  // 面积=min(8,7)*7=49 (更新最大值)
           ↑             ↑   // 7<8 → 右移

Step3: [1,8,6,2,5,4,8,3,7]  // 面积=min(8,3)*6=18
           ↑          ↑      // 3<8 → 右移

...继续移动直至指针相遇,最终返回最大面积49

复杂度分析

  • 时间复杂度:O(n)
    双指针完整扫描数组一次,每个元素被访问一次
  • 空间复杂度:O(1)
    仅使用常量额外空间(指针和临时变量)

总结

该解法通过双指针从两端向中心扫描,每次移动较短边的指针,高效地找到最大容器面积。算法充分利用了容器容量受限于较短边的特性,确保在O(n)时间内解决问题,是最优解法。

15. 三数之和

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        int length = nums.length;
        List<List<Integer>> list = new LinkedList<>();
        // 1.排序数组
        Arrays.sort(nums);
        // 2.固定一个数
        for (int i = 0; i < length; i++) {
            if(i>0 && (nums[i] == nums[i-1])){
                continue;
            }
            int target = nums[i];
            // 3.双指针
            int left = i+1;
            int right = length - 1;
            while (left < right){
                if(nums[left] + nums[right] == -target){
                    List<Integer> list1 = new LinkedList<>();
                    list1.add(nums[left]);
                    list1.add(nums[right]);
                    list1.add(nums[i]);
                    left = left + 1;
                    right = right - 1;
                    list.add(list1);
                    while (left < right && nums[left] == nums[left-1]){
                        left = left + 1;
                    }
                    while (left < right && nums[right] == nums[right+1]){
                        right = right - 1;
                    }
                }else if(nums[left] + nums[right] > -target){
                    right = right - 1;
                }else {
                    left = left + 1;
                }
            }
        }
        return list;
    }
}

解题思路:排序 + 双指针法解决三数之和问题

问题分析:
给定一个整数数组,找出所有不重复的三元组 [a, b, c],使得 a + b + c = 0。核心挑战在于:

  1. 找到所有满足条件的三元组
  2. 避免返回重复解
  3. 高效实现(不能使用暴力三重循环)

核心思想:

  1. 排序预处理:

    • 首先对数组排序,使相同元素相邻,便于跳过重复解
    • 排序后可以利用有序性进行高效搜索
  2. 固定+双指针:

    • 外层循环固定一个数 nums[i]
    • 内层使用双指针在剩余数组中寻找两数之和等于 -nums[i]

算法步骤:

  1. 排序数组:
    Arrays.sort(nums);

  2. 外层循环:

    • 遍历数组,固定当前数 nums[i]
    • 跳过重复固定数:
      if(i>0 && nums[i]==nums[i-1]) continue;
  3. 双指针搜索:

    • 初始化指针:left = i+1, right = length-1
    • 目标值:target = -nums[i]
    • 当 left < right 时循环:
      a. 找到有效三元组:
      nums[left] + nums[right] == target
      • 记录三元组 [nums[i], nums[left], nums[right]]
      • 左右指针同时向中间移动
      • 跳过重复值:
        while(left < right && nums[left]==nums[left-1]) left++;
        while(left < right && nums[right]==nums[right+1]) right--;
        
      b. 和过大:
      nums[left] + nums[right] > target
      • 右指针左移:right--
        c. 和过小:
        nums[left] + nums[right] < target
      • 左指针右移:left++

关键点解释:

  • 避免重复解:
    • 固定数层跳过重复值
    • 找到解后跳过相同左右指针值
  • 双指针高效性:
    利用排序后的有序性,通过指针移动快速定位解
  • 时间复杂度优化:
    从暴力解法的 O(n³) 优化到 O(n²)

示例模拟(输入:[-1,0,1,2,-1,-4]):

排序后:[-4,-1,-1,0,1,2]

Step1: 固定 -4 → target=4
  双指针:[-1,-1,0,1,2]
  -1+2=1<4 → left++ → -1+2=1<4 → left++ → 0+2=2<4 → left++ → 1+2=3<4 → 结束

Step2: 固定第一个 -1 → target=1
  双指针:[-1,0,1,2]
  -1+2=1=target → 记录[-1,-1,2]
  移动指针:left++(0), right--(1)
  0+1=1=target → 记录[-1,0,1]
  结束

Step3: 跳过重复的第二个 -1 → 结束

复杂度分析

  • 时间复杂度:O(n²)
    • 排序:O(n log n)
    • 双指针循环:外层O(n),内层O(n),总计O(n²)
  • 空间复杂度:O(1) 或 O(n)
    • 取决于排序算法(库函数一般为O(log n)栈空间)
    • 结果存储空间不计入复杂度分析

总结

该解法通过排序预处理+双指针技巧,高效解决了三数之和问题:

  1. 排序使相同元素相邻,便于跳过重复解
  2. 固定一个数转化为两数之和问题
  3. 双指针在有序数组中高效搜索
  4. 精心设计的跳过逻辑避免重复解
  5. 时间复杂度从O(n³)优化到O(n²),是最优解法之一
力扣热题100刷题笔记[python] 力扣100刷题题解 阅读详情

相关推荐

LeetCode 热题 100 回顾

力扣最受刷题发烧友欢迎的 100 道题 LeetCode 热题 100 : 题目回顾、解题思路、复杂度分析、代码实现、验证算法

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 9万+

【leetCode力扣热题100(二)——双指针】适合入门·Python代码及详细解析(持续更新)

当前状态:left = 1,right = 10,left_max = 1,right_max = 2,water_trapped = 0。left += 1,现在 left = 1;当前状态:left = 1,right = 11,left_max = 1,right_max = 1,water_trapped = 0。left += 1,现在 left = 2;当前状态:left = 2,right = 10,left_max = 1,right_max = 2,water_trapped = 1。

m0_73872643的博客 1199

Sonatype nexus3 数据迁移及升级3.71+(迁移到H2数据库)

nexus3旧版本OrientDB升级H2,及整体迁移nexus3数据到其它服务器。

葫芦娃 5550

LeetCode 热题100(二)【双指针】

4.如果nums[i] == nums[i - 1],意味着在nums[i-1]时已经对left和right遍历过了,如果再对nums[i]遍历,就会出现重复组合,因此直接跳过这种情况。2.i=0时,nums[0]=-4<0,不返回,left=1,right=5,left<right,nums[left]=-1,nums[right]=2,5.令left = i + 1,right = nums.size() - 1,计算nums[i] + nums[left] + nums[right]

jrrz0828的博客 1296

八戒留档之宝塔部署edusoho

1.安装好基础的服务 2.上传你下载的代码到www/wwwroot文件3、配置网站 4.编辑创建的网站修改nginx文件 NGINX配置如下 server { listen 80; server_name 你的域名; root /www/wwwroot/项目文件名称/web/; location / { try_files $uri /app_dev.php$is_args$args; } ...

wolf23151269的博客 2540

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们,今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例!如果你对机器学习感兴趣,或是正寻找如何用AI技术解决实际问题的方法,这篇分享绝对不容错过!👩‍💻✨

Jacklx888的博客 3245

《LeetCode热题100》---<双指针篇四道②>

本篇博客讲解LeetCode热题100道双指针篇中的 第三道:三数之和(中等) 第四道:接雨水(困难)

m0_73456341的博客 1052

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2156

(二)LeetCode热题100——双指针

LeetCode热题100——双指针

qq_74276498的博客 511

加湿器方案-DLT8M04TS-杰力科创

基本组成: 一个触摸按键、一组RGB灯、一个雾化片、一个充电IC。 产品功能: 第一次上电光机状态,RGB红/绿/红灯依次闪烁灭; 2、按键功能:短按开关机和三档喷雾工作模式,第一次短按持续喷雾,短按第二次喷3S,停3S,短按第三次关闭喷雾模式,依次循环; 在喷雾或是不喷雾的状态下长按1.5S RGB灯渐变,一直循环,第二次长按当前灯光闪烁一下常亮,第三次长按关机; 3、持续喷雾定时5小时自动断电,间歇喷雾定时10小时自动断电,若在间歇工作时有切换为持续喷雾,那间歇喷雾的...

JLKCsz的博客 512

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4142

刷题日记2024-11-19 双指针

LeetCode 热题 100 双指针。来自力扣LeetCode-15题。方法一:三重循环暴力--会超时。

2403_83306207的博客 186

Docker版OnlyOffice中文字体配置全攻略:从字号调整到字体添加

本文详细介绍了在Docker版OnlyOffice中配置中文字体和调整字号的完整方案。通过容器内操作和配置文件修改,实现中文标准字号映射及思源、阿里巴巴等优质字体的集成,提升文档排版的规范性和专业性。特别针对企业级部署提供了性能优化建议和常见问题解决方案。

weixin_28309571的博客 136

【LeetCode 热题 100】42. 接雨水——(解法二)双指针

这段代码采用了双指针法来解决“接雨水”问题,这是一种空间复杂度更优的解法。其核心思想是在一次遍历中,通过动态维护左右两侧的最高墙,来计算每个位置可以接的雨水。代码的整体思路可以分解为以下步骤:核心问题: 与前一个方法一样,代码旨在计算由数组 代表的柱子能接住的总雨水量。其基本原理不变:在任何一个位置 ,能接的雨水量取决于其左侧最高墙和右侧最高墙的较小者与当前墙高度的差,即 。双指针算法: 此算法的核心在于巧妙地避免了预先计算并存储所有位置的左右最大高度,从而将空间复杂度从 O(N) 优化到 O(1)。累加

最短的捷径就是绕远路,绕远路才是我的最短捷径。 978

30、模态组合规则在振动分析中的应用

本文详细介绍了模态组合规则在振动分析中的应用,重点讨论了绝对峰值叠加法(SRSS)和完全二次组合(CQC)的理论基础、应用场景及优缺点。通过具体工程实例,展示了模态组合规则在地震载荷下结构响应分析中的实际效果,并提供了应用步骤和注意事项,为结构设计和安全评估提供了科学依据。

nice1的博客 219

温度PID控制PLC程序

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

LeetCode 热题 100 题解(二):双指针部分(1)

上面代码展示的就是遍历第一个元素的逻辑,首先要保证 i 不会越界,其次要保证 nums[i] 是小于等于零的,当发现 nums[i] > 0 的时候就说明本次的查找已经结束了,直接将 res 返回;第二段 if 进行去重的,就是如果发现 nums[i] == nums[i - 1] (和上一个相同),此时就直接遍历下一个元素。

kkq的博客 731

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LeetCode 热题 HOT100(二):双指针进阶与滑动窗口(Go 实现)

(欢迎来访)✨本文覆盖力扣「热题 100」学习计划第 6~10 题,全部使用实现。可与上一篇(哈希表与双指针入门)对照阅读。

lihaoweiwudi_的博客 2213

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode 热题 100——移动零(双指针)+ 盛最多水的容器(双指针)

LeetCode 热题 100——移动零(双指针)+ 盛最多水的容器(双指针)

wahaha51的博客 675

【力扣热题100】双指针—— 三数之和

本文介绍了寻找数组中所有和为0且不重复的三元组的解法。首先对数组排序,然后固定一个元素,使用双指针法在剩余部分寻找另外两个元素,使三者之和为0。通过跳过重复元素来避免结果重复,将时间复杂度优化为O(n^2)。该方法在有序数组基础上,通过指针移动高效地缩小搜索范围,同时保证了结果不重复。

soul7y的博客 344

LeetCode热题100记录-【哈希、双指针、滑动窗口】

思考:本质是看字母是否有相同编码,合理设置encode规则,可将所有相同字符串的规则作为哈希表的key,所求结果就是哈希表的values。思考:整体思路:用need哈希表存储所需要的字符和每个字符需要的个数,用window哈希存储目前的窗口元素。思考:从容器宽度最大时考虑面积,根据左右高度,依次收缩容器宽度,考虑所有可能面积。思考:两数之和用双指针,三数之和等于两数之和+顺序遍历第一个数。问题:最开始想用快慢指针,依次遍历,行不通,思路错误。思考:so easy,秒。思考:so easy,秒。

zxy0000zxy的博客 358

LeetCode热题100(二十二)——160.相交链表

【代码】LeetCode热题100(二十二)——160.相交链表。

Young_4的博客 711

LeetCode 热题 100 题解(二):双指针部分(2)| 滑动窗口部分(1)

比如上图中的红色部分,它存储水的容量其实就是 **左边的最大高度** 和 **右边的最大高度** 的 最小值,减去这里的格子高度(案例中为 0),在上面的案例中,左边的最高高度为 2,右边的最高高度为 3。 所以本题的暴力解法就比较好想了,找到其左边最大高度,再找到其右边的最大高度,通过上面的规律进行运算。

kkq的博客 885

LeetCode 热题 100 —— 三数之和(双指针) + 无重复字符的最长子串(滑动窗口)

LeetCode 热题 100 —— 三数之和(双指针) + 无重复字符的最长子串(滑动窗口)

wahaha51的博客 493

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

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

Lenyiin 3585

【完结】LeetCode 热题 HOT 100分类+题解+代码详尽指南

算法,被誉为程序员的内功心法,其重要性不言而喻。不仅是技术面试中的关键考察点,帮助无数开发者赢得心仪的工作机会,更是提升逻辑思考与核心编程技能的磨刀石。作为一名长期活跃于LeetCode平台的用户,我在此分享一些心得与体会,为正在算法修炼道路上探索的你提供指引,避免不必要的弯路,加速成长的步伐。以下是【完结】LeetCode 热题 HOT 100分类+题解+代码详尽指南 链接,只需关注这一篇即可享受完结版 LeetCode 热题 100,每个主题均有详尽的代码注释及解题思路~

weixin_43298211的博客 3万+

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

热题一百

LXY999222的博客 6281
上一篇: 【LeetCode 热题 100】(一)哈希
下一篇: 【黑马SpringCloud微服务开发与实战】(九)elasticsearch基础
夜斗小神社
博客等级 码龄7年 3718粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值