当前位置: 首页 > news >正文

随想录一期 day2 [977.有序数组的平方|209. 长度最小的子数组|59.螺旋矩阵II(剥洋葱)]

977.有序数组的平方

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

思路

  • 递增数组,平方后最大值一定在最左侧或者最右侧,可想到–双指针
  • 左右指针向中间靠拢,每次可以得到一个最大值,以此类推,放入结果集中
  • 临界条件需要左右指针相等,不会漏掉最后一个数

复杂度

  • 时间 O(n)
  • 空间 O(n)
class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] rt = new int[nums.length];
        int l = 0 ,r = nums.length-1,pos = r ;
        while(l<=r){
            int lv = nums[l] * nums[l] ;
            int rv = nums[r] * nums[r];
            if(lv < rv){
                rt[pos--] = rv ;
                --r;
            }else{
                rt[pos--] = lv ;
                ++l;
            }
        }
        return rt; 
    }
}

209. 长度最小的子数组

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

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

思考

  • 最小数据需要逐个判断子数据的长度,可想到滑动窗口
  • 动态子数组的最小长度,可想到快慢指针,快指针得到满足条件的子数组时,移动慢指针
  • 慢指针的移动需要借助循环来实现,即需要两层循环

复杂度

  • 时间 O(2n)==>O(n)
  • 空间 O(1)
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int l = 0 ,r = 0 ,sum = 0, min = Integer.MAX_VALUE;
        while(r < nums.length){
            sum += nums[r];
            while(sum >= target){
                min = Math.min(min,r-l+1);
                sum -= nums[l++];
            }
            ++r;
        }
        return min==Integer.MAX_VALUE ? 0 : min;
    }
}

59.螺旋矩阵II

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

思考

  • 按顺时针旋转,旋转一周可得到四条边,分别为上、右、下、左
  • 每条边的临界值为0或者n-1,循环为左右闭区间,顾走完一条边就要把这条边消掉,(起名为剥洋葱)
  • 走完一周,相当消掉一周的边,是不是很像剥洋葱,一层一层的剥开…
class Solution {
    public int[][] generateMatrix(int n) {
        //四条边left rigth top bottom 根据旋转方向得到每条边的临界值,类似洋葱剥皮
        // 右->做
        int left  = 0 ;
        // 左->右
        int right = n - 1 ; 
        // 上->下
        int bottom = n - 1 ; 
        // 下->上
        int top = 0 ;
        int num = 1 ,total = n * n;
        int [][] res = new int[n][n];
        while(num <= total){
            //左->右  高度(top)不变
            for(int i = left ; i<=right ; i ++){
                res[top][i] = num++;
            }
            top++;  //上层边消掉
            //上->下  右侧(right)不变
            for(int i = top ; i<=bottom ; i++){
                res[i][right] = num++;
            }
            right--; //右侧边消掉
            //右->左 底部(bottom)不变
            for(int i = right ; i>=left ; i--){
                res[bottom][i] = num++;
            }
            bottom--; //下层边消掉
            //下->上 左侧(left)不变
            for(int i = bottom ; i>=top ;i--){
                res[i][left] = num++;
            }
            left++; //左侧边消掉
        }
        return res ;
    }
}

相关文章:

  • 自动驾驶数据标注基本框架,你了解多少?丨曼孚科技
  • 前景理论-风险决策分析的思维模型
  • Intel汇编-CMOV条件传送指令
  • 基于java宠物交易计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  • 单片机毕设选题 - 便携式空气质量检测系统(物联网 嵌入式)
  • gsnark中的证明方案及曲线
  • LL(1)文法定义及判别
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • 02-C语言经典算法100例
  • 〖Python 数据库开发实战 - Python与Redis交互篇③〗- 利用 redis-py 实现列表数据类型的常用指令操作
  • LwIP学习笔记1 - LwIP的设计目的、分层设计思想及模块划分概览
  • 使用 Convex 进行状态管理的指南
  • 卷积神经网络参数解读
  • IP 地址及其应用(计算机网络)
  • poi-tl(word模板渲染)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • CSS魔法堂:Absolute Positioning就这个样
  • Mysql5.6主从复制
  • Rancher如何对接Ceph-RBD块存储
  • STAR法则
  • 飞驰在Mesos的涡轮引擎上
  • 原生js练习题---第五课
  • 7行Python代码的人脸识别
  • RDS-Mysql 物理备份恢复到本地数据库上
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #微信小程序:微信小程序常见的配置传值
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (3)(3.5) 遥测无线电区域条例
  • (C)一些题4
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (南京观海微电子)——I3C协议介绍
  • (篇九)MySQL常用内置函数
  • (七)c52学习之旅-中断
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core 成都线下面基会拉开序幕
  • .Net Memory Profiler的使用举例
  • .NET Micro Framework初体验
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET上SQLite的连接
  • @Bean注解详解
  • @SpringBootApplication 包含的三个注解及其含义
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [《百万宝贝》观后]To be or not to be?
  • [AIGC] Java 和 Kotlin 的区别
  • [Android 数据通信] android cmwap接入点
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Android]通过PhoneLookup读取所有电话号码
  • [BZOJ] 2044: 三维导弹拦截
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C#] 如何调用Python脚本程序