算法训练营第二天 | 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II

news2024/12/22 10:32:23


问题( 一 )

问题描述:

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

题目链接: 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


问题分析:

提示:给定的数组是按从小到大的顺序排列的,可能大家容易想到的就是暴力破解,所有数先平方,简单粗暴。再进行排序。这里给大家讲的是双指针的思路。

         例如给定的数组:   nums={ -4 , -3 , 1 , 2 , 4};  通过观察我们可以得出,平方之后两侧的数是最大的,所以双指针法,一个往右移动,一个向左移动,平方进行比较,大的存放到数组中,小的不移动,说明一点(这里我们放入数组的元素,是从尾部往前存放,这样得到得数组才是从小到大得顺序)。同时下面的代码中没有,对两个元素相等进行处理,为什么?1、 因为在实际处理的时候,遇到两个数相等的是比较少的    2、这样写的代码更简洁,可读性更高。

         视频讲解(代码随想录):

双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili


解决方案:

vector<int> sortedSquares(vector<int>& nums) {
      int left = 0 ;
      int right = nums.size()-1;
      vector< int> ret(right+1);
      int num=right;
      while( left < right ){
         if( nums[left]*nums[left] < nums[right]*nums[right] ){
             ret[num--]=nums[right]*nums[right];
             right--;
            
         } 
         else { //大于等于的情况
             ret[num--]=nums[left]*nums[left];
             left++;
         }
       }
     ret[num]=nums[left]*nums[ left ];
     return ret;
    }

问题(  二  ) 

问题描述: 

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

问题分析:

          求符合条件的数组,就是一个滑动窗口,其实也是双指针,前后两个指针固定住一个窗口。两个指针都指向数组的第一个元素,定义一个计数器(计算元素的值),第一个指针往后移动遍历元素,当我们的计数速器大于或者等于给定的 target  时,此时这个区间就是我们要找的子数组,此时我们的第一个指针往后移动,不断的压缩我们的窗口,取符合的最小窗口。 

          视频讲解: 

双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili

解决方案:

int minSubArrayLen(int target, vector<int>& nums) {

    int size=nums.size();     //记录子序列的长度
    int sum=0 ;      //子序列的元素的大小
    int flag=0 ;
    int lenth=0 ;
    int i=0 ;    
    for(int j=0 ; j< nums.size() ; j++){
        sum += nums[j];
        while( sum >=target ){
            lenth = j-i+1;     //区间的长度
            size= size > lenth ? lenth : size;
            flag=1;
            sum-=nums[i];
            i++;    //缩小区间长度
        }
    }
    
  return flag ==1 ?size : 0 ;
}

问题(  三  ) 

问题描述:

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

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

问题分析:

         我们需要考虑转几圈,循环控制圈数。转圈的时候我们采用左闭右开的原则(大多数人可能会想不到这一点) 往左从零开始剩下一个元素没有处理,往下的时候就从剩下的这个元素开始,这样每处理一条边的时候,都会空出一个元素留给下一条边处理,转完一圈刚好全部点都处理完了,每次转圈的起始位置都在对角线的位置,此时我们还要考虑一个点如果圈速是奇数,说明中间是一个点,这里我们需要进行特殊处理。

标注:  这里的 **line**用来更新我们每圈的起始位置,为什么要  n-line -1 ,因为每一条边的最后一个元素不出来,以及转完一圈后要缩小范围。

 解决方案:

vector<vector<int>> generateMatrix(int n) {
     int count=n/2 ;    //要转的圈数
     int x=0,y=0;       
     vector<vector<int>> ret(n,vector<int>(n,0));   //形成的矩阵
     int value=1;
     int line=0;    //记录边界
     while( count-- ){
       // ->
        for( x=line ; y < n-line-1 ; y++ ){
            ret[x][y] = value++;
         }
         //往下
         for(  y=n-line-1 ; x < n-line-1 ; x++ ){
            ret[x][y]=value++;
         } 
         //往左
         for(  ; y > line ; y--){
             ret[x][y]=value++;
         }
         //往上
         for(  ; x > line ; x--){
            ret[x][y]=value++;
         }
         line++;   //范围缩小
         x += 1;
         y += 1;    
     }
     if(n%2!=0){   //说明中间留有一个位置
        ret[x][y]=value;
     }
     return ret;
    }

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

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

相关文章

并发编程- 线程池ForkJoinPool工作原理分析(实践)

数据结构加油站&#xff1a; Comparison Sorting Visualization 并发设计模式 单线程归并排序 public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold; //拆分的阈值&#xff0c;低于此阈值就不再进行拆分public MergeSort…

重学JDK8新特性之Stream

集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候&#xff0c;除了必需的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的操作就是 集合遍历 public static void main(String[] args) {// 定义一个List集合List<String> list Arrays.asList…

流程引擎-自定义函数的应用

背景&#xff1a; 某些业务需求比较特殊&#xff0c;需要在表单中校验或实现一些功能&#xff0c;泛微流程表单配置时实现的方式多种多样&#xff1a;JS脚本、SQL语句、公式以及其他一些标准化拖拽功能&#xff0c;本次给大家分享一下流程表单中的公式实现的一些需求场景。泛微…

动态组件<component>

用法&#xff1a; <template><div><Navbar></Navbar><Home v-if"componentName 首页"></Home><List v-else-if"componentName 列表"></List><Center v-else-if"componentName 我的">…

公众号爆文写作怎么做?或许这些领域才适合你!

最近分享了很多爆款案例&#xff0c;看了的人都在跟进&#xff0c;有些人做得很出色&#xff0c;持续出爆款&#xff0c;但还是有人遇到了瓶颈&#xff0c;阅读量停滞不前。 其实&#xff0c;能否成功与个人能力、经验、环境以及一丢丢的运气有关。 但是&#xff0c;公众号不止…

PTL电子标签助力仓储行业转型升级提升拣货效率降低误差率

在智能物流、智能工厂和智能零售等行业的快速发展中&#xff0c;电子货位标签、物流智能设备和专业智能穿戴产品的应用变得越来越重要。这些技术的引入为仓储行业带来了巨大的变革和提升。作为一家致力于电子货位标签、物流智能设备和专业智能穿戴产品的开发和市场推广的公司&a…

windows10下SQL Prompt安装和注册

文章目录 windows10下SQL Prompt安装下载安装程序安装关闭联网注册机使用测试卸载 windows10下SQL Prompt安装 下载安装程序 官网 下载后 安装 双击打开界面 关闭联网 激活失效&#xff1a; 方法1&#xff1a;在本地hosts加入以下代码&#xff1a; 127.0.0.1 licensin…

Fabric.js 自定义控件

本文简介 带尬猴&#xff0c;我是德育处主任 虽然 Fabric.js 提供的基础功能已经很丰富了&#xff0c;但有时难免需要定制一些需求。比如本文要讲的 『自定义控件』。掌握创建自定义控件这个功能&#xff0c;能够创建更加精美和实用的图形应用程序&#xff0c;提高用户体验和用…

pycharm远程连接Linux服务器

文章目录 一&#xff1a;说明二&#xff1a;系统三&#xff1a;实现远程连接方式一&#xff1a; 直接连接服务器不使用服务器的虚拟环境步骤一&#xff1a;找到配置服务器的地方步骤二&#xff1a;进行连接配置步骤三&#xff1a;进行项目文件映射操作步骤四&#xff1a;让文件…

【JavaSE专栏53】Java集合类HashMap详解

Java集合类HashMap详解 摘要引言1. HashMap简介&#xff1a;掌握什么是HashMap&#xff1f;&#x1f9d0;2. HashMap的操作技巧&#xff1a;从基础到高级&#x1f680;2.1 添加键值对&#xff1a;put(K key, V value) &#x1f4e5;2.2 获取值&#xff1a;get(Object key) &…

ORACLE数据库查询所有索引的sql语句

SELECT * FROM ALL_INDEXES WHERE TABLE_NAMEB_CONFIG; 举例&#xff1a;

PCIE-Malformed tlp,UR,UC,CA

Malformed TLP (1)收到的cpl&#xff0c;actual payload 不等于length&#xff1b; (2)收到的cpl&#xff0c;违背了RCB准则&#xff1b; (3)Local tlp prefix不在end-end tlp prefix前&#xff1b; (4)不支持local tlp prefix的设备&#xff0c;同时extended fmt field为1…

提升用户体验的关键步骤

快速搭建功能齐全的户外帐篷用具小程序&#xff0c;是现今越来越流行的一种商业模式。通过将线下的户外用品店转移到线上&#xff0c;不仅可以减少人力成本和租金等固定支出&#xff0c;还可以为用户提供更便捷的购物体验。因此&#xff0c;学习如何快速搭建一个功能齐全的户外…

面向对象(基础)知识点强势总结!!!

文章目录 一、知识点总结&#xff08;1&#xff09;面向过程VS面向对象&#xff08;2&#xff09;类、对象&#xff08;3&#xff09;类的成员之一&#xff1a;属性&#xff08;或成员变量&#xff09;&#xff08;4&#xff09;类的成员之二&#xff1a;方法&#xff08;5&…

echarts折线图y轴刻度自适应

在做温湿度趋势曲线图时&#xff0c;我碰到了如下图这样的问题。我的实际值&#xff0c;都没有超过100的刻度的&#xff0c;但是他y轴的刻度线都到了250去了&#xff0c;这样完全不对。 尝试过强行给y周刻度设置最大最小值 &#xff0c;但是结果也不对。 yAxis: { type: value…

知识付费系统的移动应用开发:跨平台和原生应用的比较

移动应用在知识付费系统中发挥着重要作用&#xff0c;为用户提供了便捷的访问方式。在开发知识付费系统的移动应用时&#xff0c;开发团队通常需要考虑使用跨平台开发工具或原生开发。本文将比较这两种方法&#xff0c;讨论它们的优点和缺点&#xff0c;并提供示例代码来说明它…

正确部署Baichuan2(Ubuntu20.4) 步骤及可能出现的问题

部署其实是不太复杂的,但实际上也耗费了接近2-3天的时间去不断的设置 1 硬件配置信息 采用esxi 虚拟化的方式将T4 卡穿透给esxi 种的ubuntu20.4虚拟机 CPU给到8 core 内存至少32GB以上 T4卡是16GB 2 预先准备OS环境 这里使用的是ubuntu20.4版本,esxi中需要设置uefI启动方…

深入浅出排序算法之简单选择排序

目录 1. 原理和执行流程 2. 代码实现 3. 性能分析 4. 双向选择排序&#xff08;了解&#xff09; 1. 原理和执行流程 选择排序包含了堆排序和简单选择排序。 每一次从无序区间选出最大&#xff08;或最小&#xff09;的一个元素&#xff0c;存放在无序区间的最后&#xff0…

【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️函数重载☁️函数重载的概念☁️函数重载的作用☁️C支持函数重载的原理…

Vue获取当前时间(年月日时分秒_yyyyMMddHHmmss)

代码实现&#xff1a; let yy new Date().getFullYear()let mm new Date().getMonth() 1let dd new Date().getDate()let hh new Date().getHours()let mf new Date().getMinutes() < 10 ? 0 new Date().getMinutes() : new Date().getMinutes()let ss new Date().…