算法之路(二)

🖊作者 : D. Star.
📘专栏 : 算法小能手
😆今日分享 : 你知道北极熊的皮肤是什么颜色的吗?(文章结尾有答案哦!)在这里插入图片描述

文章目录

  • 力扣的209题
    • ✔解题思路
    • ✔代码:
    • ✔总结:
  • 力扣的3题
    • ✔解题思路:
    • ✔代码:
    • ✔总结:
  • 力扣的1004题
    • ✔解题思路:
    • ✔代码:
    • ✔总结:
  • 力扣的1658题
    • ✔做题思路:
    • ✔代码:
    • ✔总结:
    • 感谢家人的阅读,不准确的地方 欢迎在评论区指正!

力扣的209题

做题链接209

✔解题思路

先用左右指针(left , right),从最左边开始找,右指针先动

  1. 利用单调性:当你找到第一个 >=target 时,右指针就不用再向右边找了,因为我们要找的是最短的子数组,再向右的子数组肯定是比第一次找到的长。
  2. 移动左指针,在原来的和的基础上,减去前一个左指针的值(left<right),找到和 >=target 的子数组长度,如果比之前的子数组长度短,就覆盖。
  3. 细节问题:符合长度的子数组 len 初始值赋多少?由于不清楚输入数组的长度,并且万一没有符合条件的子数组,返回的值就会出错。所以建议赋值整型的最大值 Integer.MAX_VALUES

✔代码:

    public static int minSubArrayLen2(int target, int[] nums) {int n = nums.length,sum = 0,len = Integer.MAX_VALUE;for(int left = 0,right = 0;right<n;right++){sum+=nums[right];while (sum>=target){len = Math.min(len,right-left+1);sum-=nums[left++];}}return len == Integer.MAX_VALUE?0:len;}

✔总结:

  1. 没注意到或者说是没有理解题目中的连续子数组 这个字眼,上来就sort()了
  2. 我的做法是找到最大的数字,然后在他的左边和右边开始找长度最小的子数组,但是后来发现行不通。
  3. 正确做法:用滑动窗口,“同向双指针”。

力扣的3题

做题链接:力扣3题

✔解题思路:

将字符串转化为字符数组。用数组代换Hash表。int[] hash = new int[128];//这里的128刚好囊括了所有阿斯克码值(0-127)。
先入窗口,然后判断,若符合判断,则出窗口,不符合则得出结果,最后循环更新结果。

✔代码:

    public static int lengthOfLongestSubstring2(String ss) {char[] s = ss.toCharArray();//用数组代换Hash表int[] hash = new int[128];//这里的128刚好囊括了所有阿斯克码值(0-127)int right = 0, left = 0, ret = 0;while (right < s.length) {hash[s[right]]++;//让s[right]所在的阿斯克码值+1----入窗口while (hash[s[right]] > 1) {//说明该字母已存在hash[s[left++]]--;//让s[left++]所在的阿斯克码值-1----窗口}ret = Math.max(ret,right-left+1);right++;}return ret;}

✔总结:

这题用到了Hash表的思想,用数组代替阿斯克码值,很巧妙。

力扣的1004题

做题链接:力扣1004题

✔解题思路:

  1. right先进窗口,如果是1,跳过;如果是0,k–。
  2. 判断k的值,如果k值<0,则遇0无法再翻牌子
  3. 则出窗口,left++;遇到1,无视;遇到0,k++;
  4. 得出结果,更新结果

✔代码:

       public static int longestOnes2(int[] nums, int k) {int n = nums.length, kk = k, left = 0, right = 0, len = 0;while (right < n) {//先进窗口if (nums[right] == 0) {kk--;right++;}else right++;//判断kk的值while (kk < 0) {if (nums[left++] == 0) kk++;}//计算长度len = Math.max(len, right - left);}return len;}

✔总结:

这题写的时候有点迷糊,没想到这种方法,老师刚讲的时候,还感觉挺懵的,但是细想也挺简单的,就像是求俩数之和一样,要使得k>=0才行。这题还是需要多复盘一下的!!!

力扣的1658题

做题链接力扣1658

✔做题思路:

重要思路:正难则反

  1. 计算出整个数组sum 的值和target (代表窗口里的和sum-x)的值
  2. 进窗口【并计算出窗口内tmp的值】
  3. 判断tmptarget 的关系【>则left++;<则right++;=则计算len】
  4. 出窗口:就是上面的【>则left++】
  5. 更新结果:就是上面的【=则计算len】

✔代码:

   public static int minOperations(int[] nums, int x) {//1. 计算出整个数组sum的值和target(代表窗口里面的和sum-x)的值int sum = 0;for (int i : nums) sum += i;int target = sum - x;//细节://如果target<0(即x>sum),则直接返回-1if(target<0) return -1;//2. 进窗口int left = 0, right = 0, tmp = 0, len = -1;//这里长度len设为-1,有两个好处:// 1. 题目要求没有符合条件的就返回-1。// 2.最后可以判断,如果len是-1,则直接返回-1,否则返回num.length。while (right < nums.length) {tmp += nums[right];//3. 判断窗口里面的值while (tmp > target) {//大于target,[left++]//4. 出窗口tmp -= nums[left++];}if (tmp == target) {// 等于target,计算窗口长度//5. 更新长度len = Math.max(len, right - left+1);}// 小于target,right++//6. 进窗口right++;}if(len == -1) return len;return nums.length-len;}

✔总结:

这题刚开始的时候,理解错题目意思了,我上来就给数组排序,然后总有一些例子过不去,后来知道了题目的意思,是在原来的顺序上进行移动,但是无从下手。看了老师的解题步骤和思路,觉得很精妙!

答案:北极熊的皮肤是黑色的!我也是今天才知道…涨知识了~


感谢家人的阅读,不准确的地方 欢迎在评论区指正!

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

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

相关文章

【计算机视觉】24-Object Detection

文章目录 24-Object Detection1. Introduction2. Methods2.1 Sliding Window2.2 R-CNN: Region-Based CNN2.3 Fast R-CNN2.4 Faster R-CNN: Learnable Region Proposals2.5 Results of objects detection 3. SummaryReference 24-Object Detection 1. Introduction Task Defin…

Android Studio常见问题

Run一直是上次的apk 内存占用太大&#xff0c;导致闪退

基于Python3的scapy解析SSL报文

scapy对于SSL的支持个人觉得不太好&#xff0c;至少在构造报文方面没有HTTP或者DNS这种常见的报文有效方便&#xff0c;但是scapy对于SSL的解析还是可以的。下面我们以一个典型的HTTPS的报文为例&#xff0c;展示scapy解析SSL报文。 一&#xff1a;解析ClientHello报文 from sc…

【zabbix监控三】zabbix之部署代理服务器

一、部署代理服务器 分布式监控的作用&#xff1a; 分担server的几种压力解决多机房之间的网络延时问题 1、搭建proxy主机 1.1 关闭防火墙&#xff0c;修改主机名 systemctl disbale --now firewalld setenforce 0 hostnamectl set-hostname zbx-proxy su1.2 设置zabbix下…

Docker 可视化面板 ——Portainer

Portainer 是一个非常好用的 Docker 可视化面板&#xff0c;可以让你轻松地管理你的 Docker 容器。 官网&#xff1a;Portainer: Container Management Software for Kubernetes and Docker 【Docker系列】超级好用的Docker可视化工具——Portainer_哔哩哔哩_bilibili 环境 …

服务注册发现 springcloud netflix eureka

文章目录 前言角色&#xff08;三个&#xff09; 工程说明基础运行环境工程目录说明启动顺序&#xff08;建议&#xff09;&#xff1a;运行效果注册与发现中心服务消费者&#xff1a; 代码说明服务注册中心&#xff08;Register Service&#xff09;服务提供者&#xff08;Pro…

三十二、W5100S/W5500+RP2040树莓派Pico<UPnP示例>

文章目录 1 前言2 简介2 .1 什么是UPnP&#xff1f;2.2 UPnP的优点2.3 UPnP数据交互原理2.4 UPnP应用场景 3 WIZnet以太网芯片4 UPnP示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着智能家居、物联网等…

ESP32-BLE基础知识

一、存储模式 两种存储模式&#xff1a; 大端存储&#xff1a;低地址存高字节&#xff0c;如将0x1234存成[0x12,0x34]。小端存储&#xff1a;低地址存低字节&#xff0c;如将0x1234存成[0x34,0x12]。 一般来说&#xff0c;我们看到的一些字符串形式的数字都是大端存储形式&a…

服务器端请求伪造(SSRF)

概念 SSRF(Server-Side Request Forgery&#xff0c;服务器端请求伪造) 是一种由攻击者构造形成的由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要攻击目标网站的内部系统。&#xff08;因为内部系统无法从外网访问&#xff0c;所以要把目标网站当做中间人来…

Flutter 中在单个屏幕上实现多个列表

今天&#xff0c;我将提供一个实际的示例&#xff0c;演示如何在单个页面上实现多个列表&#xff0c;这些列表可以水平排列、网格格式、垂直排列&#xff0c;甚至是这些常用布局的组合。 下面是要做的&#xff1a; 实现 让我们从创建一个包含产品所有属性的产品模型开始。 …

Android描边外框stroke边线、rotate旋转、circle圆形图的简洁通用方案,基于Glide与ShapeableImageView,Kotlin

Android描边外框stroke边线、rotate旋转、circle圆形图的简洁通用方案&#xff0c;基于Glide与ShapeableImageView&#xff0c;Kotlin 利用ShapeableImageView专门处理圆形和外框边线的特性&#xff0c;通过Glide加载图片装载到ShapeableImageView。注意&#xff0c;因为要描边…

⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL存储过程 1. 介绍2. 使用3. 变量①系统变…

每天学习一点点之 Spring Web MVC 之抽象 HandlerInterceptor 实现常用功能(限流、权限等)

背景 这里介绍一下本文的背景&#xff08;废话&#xff0c;可跳过&#xff09;。上周有个我们服务的调用方反馈某个接口调用失败率很高&#xff0c;排查了一下&#xff0c;发现是因为这个接口被我之前写的一个限流器给拦截了&#xff0c;随着我们的服务接入了 Sentinel&#x…

MTK Pump Express 快速充电原理分析

1 MTK PE 1.1 原理 在讲正文之前&#xff0c;我们先看一个例子。 对于一块电池&#xff0c;我们假设它的容量是6000mAh&#xff0c;并且标称电压是3.7V&#xff0c;换算成Wh(瓦时)为单位的值是22.3Wh(6000mAh*3.7V)&#xff1b;普通的充电器输出电压电流是5V2A(10W)&#xff0c…

RK3588平台开发系列讲解(项目篇)嵌入式AI的学习步骤

文章目录 一、嵌入式AI的学习步骤1.1、入门Linux1.2、入门AI 二、瑞芯微嵌入式AI2.1、瑞芯微的嵌入式AI关键词2.2、AI模型部署流程 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2; 本篇将给大家介绍什么是嵌入式AI。 一、嵌入…

Docker与Kubernetes结合的难题与技术解决方案

文章目录 1. **版本兼容性**技术解决方案 2. **网络通信**技术解决方案 3. **存储卷的管理**技术解决方案 4. **安全性**技术解决方案 5. **监控和日志**技术解决方案 6. **扩展性与自动化**技术解决方案 7. **多集群管理**技术解决方案 结语 &#x1f388;个人主页&#xff1a…

编程刷题网站以及实用型网站推荐

1、牛客网在线编程 牛客网在线编程https://www.nowcoder.com/exam/oj?page1&tab%E8%AF%AD%E6%B3%95%E7%AF%87&topicId220 2、力扣 力扣https://leetcode.cn/problemset/all/ 3、练码 练码https://www.lintcode.com/ 4、PTA | 程序设计类实验辅助教学平台 PTA | 程…

【Java 进阶篇】Ajax 实现——原生JS方式

大家好&#xff0c;欢迎来到这篇关于原生 JavaScript 中使用 Ajax 实现的博客&#xff01;在前端开发中&#xff0c;我们经常需要与服务器进行数据交互&#xff0c;而 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于创建异步请求的技术&#xff0c;它…

云原生专栏丨基于服务网格的企业级灰度发布技术

灰度发布&#xff08;又名金丝雀发布&#xff09;是指在黑与白之间&#xff0c;能够平滑过渡的一种发布方式。在其上可以进行A/B testing&#xff0c;即让一部分用户继续用产品特性A&#xff0c;一部分用户开始用产品特性B&#xff0c;如果用户对B没有什么反对意见&#xff0c;…

广州华锐互动VRAR:VR教学楼地震模拟体验增强学生防震减灾意识

在当今社会&#xff0c;地震作为一种自然灾害&#xff0c;给人们的生活带来了巨大的威胁。特别是在学校这样的集体场所&#xff0c;一旦发生地震&#xff0c;后果将不堪设想。因此&#xff0c;加强校园安全教育&#xff0c;提高师生的防震减灾意识和能力&#xff0c;已经成为了…