代码随想录算法训练营第二天 java : 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,

news2024/9/29 9:36:33

文章目录

  • Leecode977.有序数组的平方
    • 题目链接
    • 题目
      • 暴力解法
      • 双指针解法
    • 小结
  • Leecode209.长度最小的子数组。
    • 题目连接
    • 题目
    • 难点 :
      • 滑动窗口
  • Leecode59.螺旋矩阵II
    • 题目链接
    • 题目
    • 思路
    • 用到的变量
    • 代码
    • 总结
    • 今日收获

Leecode977.有序数组的平方

题目链接

题目

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为
[16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]

示例 2: 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]

暴力解法

  public int[] sortedSquere1(int []nums)
    {
        if(nums ==null|| nums.length==0){
            return nums;
        }   //排除不合适的条件
        for(int i=0;i< nums.length;i++)
        {
            nums[i]=nums[i]*nums[i];
        }  //用一个for循环 将每一个元素都乘一遍
        Arrays.sort(nums); //最后用Arrays.sort() 排序走起
        return nums;

    }

双指针解法

数组其实是有序的,两边的值平方之后都可能成为最大数
那么可以说,最大值要么在,要么在右边,不可能在中间
此时就可以考虑使用双指针,left 指向起始位置 right指向终点位置

  • 如果A[left] * A[left] < A[right] * A[right] 那么result[k–] = A[right] * A[right]; 。
  • 如果A[left] * A[left] >= A[right] * A[right] 那么result[k–] = A[left] * A[left]; 。
     int right =nums.length-1 ;//右指针 减一是下标
       int left =0;
       int result[] = new int[ nums.length];  //原来数有多长就放多少
       int index  =  nums.length-1; //是要放到新数组里面的 下标
       while(left<=right)  //考虑到 中间值 画图
       {
           if
           ( result[left]* result[left] >nums[right]*nums[right] )
           {
               result[index--]= result[left]*result[left];
                ++left;  // 为什么要先+
           }
           else
           {
                   result[index++]= result[right]*result[right];
                   --right;
           }

       }
       return result;

   }

小结

这里没太大难度,除了自己看 ++left 和++right 与自己平常用法不同之外 也就没了,后来问到是可以表达同一个意思的
都是 变量+1

Leecode209.长度最小的子数组。

题目连接

题目

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续
子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

示例:

输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。

难点 :

滑动窗口

在这里插入图片描述

所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。

  • 本道题要实现滑动窗口要确定如下三点:
  1. 窗口内是什么?
  2. 如何移动窗口的起始位置?
  3. 如何移动窗口的结束位置?

窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。
窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。
窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
在这里插入图片描述

代码如下

 public int minSub(int nums[],int s)
    {
        int left=0;
        int result=Integer.MAX_VALUE;
        int sum=0;
        for(int right=0;right<nums.length-1;right++)
        {
            //滑动窗口的移动逻辑
            sum+=nums[right];
            while(sum>s)
            {
                result=Math.min(result,right-left+1);
                sum-=nums[left++];
            }
        }
             return result==Integer.MAX_VALUE?0:result;//如果没有找到最大值 则返回0
    }

Leecode59.螺旋矩阵II

题目链接

题目

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

思路

遵循与二分法类似的 循环不变量原则
全部都是左闭右开

接下来模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上
    在这里插入图片描述

用到的变量

1 创建个二维数组
2 n代表边长,loop代表循环的次数。(n/2获得)
3 start(start x ,start y)代表起始点的横纵坐标。
4,count 代表计数器,从1开始。

代码

public int[][] generate(int n)
    {
        int loop=0; //控制循环次数
        int [][] res =new int[n][n]; //创建二维数组 res 里面的值
        int start=0; //start x 和 start y
        int count =1; //定义计数器
        int i,j;
        while(loop++< n/2)  //根据边长来确定循环次数,规律是n/2
        {   //模拟上层从左到右
            for (j = start; j < n - loop; j++)  //loop也就是边块
            {
                res[start][j] = count++;
            }
            //模拟右层从上到下
            for (i = start; i < n - loop; i++) {
                res[i][j] = count++;
        }
        //模拟下层从右到左
        for (;j>=loop;j--)
        {
            res[i][j]=count++;
        }
        //模拟左层从下到上
        for(;i>=loop;i--)
        {
            res[i][j]=count++;
        }
        start ++;
    }
        if(n%2==1)
    {
            res[start][start]=count;
        }
        return res;
    }

总结

滑动窗口
主要要理解滑动窗口如何移动 窗口起始位置,达到动态更新窗口大小的,从而得出长度最小的符合条件的长度。
模拟行为
熟记掌握 循环不变量原则,万象不离其宗 作为面试频繁题型 我之后还要做做类似得

今日收获

今日分 第二题 和第三题 真是难得够呛 第三题更是一行一行抠得 今天好累,明天再复习一遍 休息了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界-shrine

题目 访问题目场景 这个界面很乱奥&#xff0c;我们访问网页源代码&#xff0c;我们就能看见我们需要审计的源码了 我们把python源码复制下来&#xff0c;进行分析 import flask import osapp flask.Flask(__name__)app.config[FLAG] os.environ.pop(FLAG)app.route(/) def…

如何对企业内部进行知识内容有效性管理

企业内部文档管理版本的场景&#xff0c;如果日常没有比较好的工具进行内容控制&#xff0c;经常出现意外&#xff0c;有些意外很小、但是有些意外可能就伤筋动骨&#xff0c;例如标书里边的文件放错了&#xff0c;如果定性为串标&#xff0c;那么就非常严重了。JVS 企业文档管…

细刨进程状态,浅谈僵尸进程,孤儿进程,进程切换

文章目录进程状态宏观上操作系统层面上理解进程状态具体Linux操作系统的状态kill -19 pid &#xff1a;停止进程kill -18 pid &#xff1a;继续进程D&#xff08;disk sleep&#xff09;深度睡眠$和 $^僵尸状态和死亡状态僵尸进程孤儿进程进程优先级由此衍生出另外几个概念进程…

目标检测指标IOU和mAP

IOU(交并比) 交并比&#xff08;loU&#xff09;函数做的是计算两个边界框交集和并集之比。可以用来判断定位算法的好坏。 一般来说&#xff0c;IoU大于等于0.5&#xff0c;那么结果是可以接受的&#xff0c;就说检测正确。如果预测器和实际边界框完美重叠&#xff0c;loU就是…

HTML5中的FileReader对象

FileReader FileReader主要用于将文件内容读入内存&#xff0c;通过一系列异步接口&#xff0c;可以在主线程中访问本地文件。 方法 readAsArrayBuffer(file):void : 异步按字节读取文件内容&#xff0c;结果用ArrayBuffer对象表示readAsBinaryString(file):void : 异步按字…

重磅!中国电信物联网用户超4亿

近日&#xff0c;中国电信物联网发展规模取得新突破&#xff0c;物联网用户超4亿&#xff0c;物联网用户数超过移动电话用户数&#xff0c;全面迈入“物超人”时代。 “物超人”&#xff0c;即代表“物”的移动物联网终端用户数超出代表“人”的移动电话用户数。工信部公布的数…

591页22万字城市智慧应急指挥中心信息化设计方案

【版权声明】本资料来源网络&#xff0c;仅用于行业知识分享&#xff0c;供个人学习参考&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间进行删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目 录 第1章 项…

为有状态应用而生,云原生本地存储Carina正式进入CNCF沙箱

12月14日&#xff0c;云原生本地存储开源项目 Carina 通过了全球顶级开源基金会 CNCF 技术监督委员会&#xff08;TOC&#xff09;的评定&#xff0c;正式成为 CNCF 沙箱级项目&#xff08;Sandbox Projects&#xff09;。 Carina是由博云于2021年10月主导发起的云原生本地存储…

FISCO BCOS的PBFT共识算法流程详解

原文&#xff1a; https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/design/consensus/pbft.html PBFT模块主要包括PrepareReq、SignReq、CommitReq和ViewChangeReq四种共识消息&#xff1a; PrepareReqPacket: 包含区块的请求包&#xff0c;由leader产生并向所有Repl…

nacos mac

一.nacos的下载 进入官网&#xff1a;home 朝下翻 下载一点几版本的&#xff0c;2点几的已经停止更新了。 将下载好的文件放入一个没有中文名称的目录下 nacos目录&#xff1a; 二.nacos的启动与终止 打开终端&#xff0c;进入bin目录下 我的是&#xff1a; cd /Volumes/…

办公高效、生活便捷!海尔科创生态园启用

理想的工作环境应该是什么样子&#xff1f; 是高效的智慧办公&#xff0c;流畅的商务洽谈&#xff0c;快速的停车及通行…… 仅仅这些就够了吗&#xff1f;高效的数字化体验之外&#xff0c;还有浓浓的人性化关爱&#xff0c;健身设备齐全的员工服务中心、给哺乳妈妈们专设的…

LinkedList和ArrayList对比各有什么优势?

一、LinkedList的概述 1. LinkedList是双向链表实现的List 2. LinkedList是非线程安全的 3. LinkedList元素允许为null&#xff0c;允许重复元素 4. LinkedList是基于链表实现的&#xff0c;因此插入删除效率高&#xff0c;查找效率低(虽然有一个加速动作) 5. LinkedList是…

宜明昂科上市申请“失效”:融资数据“打架”,田文志持股约20%

12月29日&#xff0c;贝多财经从港交所披露易了解到&#xff0c;宜明昂科生物医药技术&#xff08;上海&#xff09;股份有限公司&#xff08;下称“宜明昂科”&#xff09;在港交所递交的上市申请材料已经“失效”&#xff0c;目前已正常无法查看或下载。 其中&#xff0c;招股…

C++图论 最小生成树和二分图问题总结

目录 一、最小生成树 &#xff08;一&#xff09;Prim朴素版 思路 练习题 代码 &#xff08;二&#xff09;kruskal算法 练习题 代码 二、二分图 &#xff08;一&#xff09;染色法判定二分图 练习题 代码 &#xff08;二&#xff09;匈牙利算法 练习题 代码 一、…

CSDN官方开发工具利器猿如意实测

目录前言一.ChatGPT二.效率工具三.开发工具四.教程文档五.一行代码六.总结前言 猿如意 是CSDN官方2022年推出的面向程序员效率工具集合&#xff0c;里面包含非常实用的小工具&#xff08;如Linux命令查询、语音合成、Json格式化、Host切换、文字转图片、Postman、图片处理等&a…

Linux 快照 (snapshot) 原理与实践(一) 快照基本原理

文章目录0. 背景1. 如何理解快照(snapshot)?2. 快照 (snapshot) 的原理2.1 全量快照1. 克隆 (Clone)2. 镜像分离 (Split Mirror)2.2 增量快照1. 写时拷贝(Copy-On-Write)**写数据****读数据****优缺点**2. 写时重定向 (Redirect-On-Write)**写数据****读数据**优缺点3. Linux …

电脑免费录屏软件有哪些?5款视频录制软件免费版

在日常生活工作与学习中&#xff0c;都会经常遇到需要录制屏幕的情况&#xff0c;比如录制线上会议纪要记录、老师授课内容、游戏画面、线上直播等&#xff1b;在众多网络网友录屏软件分享下&#xff0c;有哪些电脑录屏软件是好用的&#xff1f;今天小编就给大家分享5款觉得还不…

最短编辑距离

最短编辑距离一、问题描述二、思路分析1、状态转移方程&#xff08;1&#xff09;状态表示&#xff08;2&#xff09;状态转移2、循环及初始化&#xff08;1&#xff09;循环设计&#xff08;2&#xff09;初始化处理三、代码实现一、问题描述 二、思路分析 这道题是一道DP的问…

oh my 毕设-人体姿态估计-简介应用场景

毕设题目为人体姿态估计&#xff0c;之前主要关注在目标检测上&#xff0c;这方面不太熟悉&#xff0c;于是想做一个系列专栏&#xff0c;从0到1学习姿态估计。 参考于大佬-同济子豪兄 姿态估计本质是关键点检测。 人体姿态的估计常常首先预测出人体各个关键点的位置坐标&am…

160.相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…