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

977.有序数组的平方

看完思路后一遍AC

  • 思路剖析:
    • 因为提到了时间复杂度为O(n),自然想到只能遍历一遍
    • 又因为只规定了时间复杂度,但是没有规定空间复杂度,所以可以考虑在定义一个数组【这一步没有考虑出来,是看了思路的】
    • 因为前一天做了二分查找,其实是考虑到使用双指针的思想,也在用这个思路思考,但是一直想着在同一个数组之内排序,没有想到重新定一个空的数组;
class Solution {public int[] sortedSquares(int[] nums) {int[] new_nums = new int[nums.length];int i = 0, j = nums.length - 1;for (int k = nums.length - 1; k >= 0; k--) {if (nums[i] * nums[i] <= nums[j] * nums[j]) {new_nums[k] = nums[j] * nums[j];j--;} else {new_nums[k] = nums[i] * nums[i];// 这一步一开始写成了i--导致总是 ArrayIndexOutOfBoundsException i++; }}return new_nums;}
}

209.长度最小的子数组

第一遍

  • 思路:判断最小长度,而且要时间复杂度是O(n log(n)),想到这样的话,只能最多for循环一遍,因此想到了双指针的算法;
  • 这一遍写了20mins,打了很多补丁,总是有逻辑上的错误导致代码死循环,因此放弃自己想,看了一下代码随想录;
  • 发现思路是差不多,但区别是:
    • 我是一直通过判断最小的长度来不断更改结果;
    • 随想录里面是通过判断i,j之间的数字之和来不断更改结果;
  • 因此,果断删除现有逻辑,开始着手随想录逻辑;
// 第一遍的错误代码
class Solution {public int minSubArrayLen(int[] nums, int target) {int min_len = nums.length + 1;int i = 0, j = 0;while (j < nums.length) {int sum = 0;for (int k = i; k >= i & k <= j; k++) {sum += nums[k];}if (sum >= target) {int tmp_len = j - i + 1;if (min_len == tmp_len) {i++;j++;continue;}min_len = min_len > tmp_len ? j - i++ + 1 : min_len;} else {j++;}}return min_len == nums.length + 1 ? 0 : min_len;}
}

第二遍

  • 写了5mins,AC了;
class Solution {public int minSubArrayLen(int[] nums, int target) {int min_len = nums.length + 1;int i = 0, sum = 0;for (int j = 0; j < nums.length; j++) {sum += nums[j];while (sum >= target) {min_len = Math.min(j - i + 1, min_len);sum -= nums[i++];}}return min_len == nums.length + 1 ? 0 : min_len;}
}

59.螺旋矩阵II

第一遍

  • 思路:第一遍的思路是如何判断每次遍历结束的节点,但是总是会有这样那样的漏洞,补丁打了二十分钟也没有完成思路,于是看了代码随想录;
  • 重点:
    • 循环不变原则,每次总是要保持左闭右开的遍历方式;
    • 学会通过多个参数去保持遍历的准确性;
    • 没有想到可以用循环圈数作为while条件;
    • 代码里面还有一个重点,注释+debug理解起来会更容易比较容易;
import java.util.Arrays;public class test {public static void main(String[] args) {int n = 4;Solution s = new Solution();int[][] result = s.generateMatrix(n);for (int i = 0; i < n; i++) {System.out.println(Arrays.toString(result[i]));}}
}class Solution {public int[][] generateMatrix(int n) {int[][] result = new int[n][n];int loop = 0;int i = 0, j = 0;int start_x = 0, start_y = 0;int offset = 1;int count = 1;while (loop++ < n / 2) {for (j = start_x; j < n - offset; j++) {// 这里是一个重点,因为每一轮遍历完,i的位置都是我们接下来要遍历的行数-1,所以需要用starty,我们定义好的行的开始位置result[start_y][j] = count++;}for (i = start_y; i < n - offset; i++) {result[i][j] = count++;}for (; j > start_y; j--) {result[i][j] = count++;}for (; i > start_x; i--) {result[i][j] = count++;}start_x++;start_y++;offset++;}if (n % 2 == 1) {result[n / 2][n / 2] = count;}return result;}
}

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

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

相关文章

数据结构和算法-哈夫曼树以相关代码实现

文章目录 总览带权路径长度哈夫曼树的定义哈夫曼树的构造法1法2 哈夫曼编码英文字母频次总结实验内容&#xff1a; 哈夫曼树一、上机实验的问题和要求&#xff08;需求分析&#xff09;&#xff1a;二、程序设计的基本思想&#xff0c;原理和算法描述&#xff1a;三、调试和运行…

Matter学习笔记(3)——交互模型

一、简介 1.1 交互方式 交互模型层定义了客户端和服务器设备之间可以执行哪些交互。发起交互的节点称为发起者&#xff08;通常为客户端设备&#xff09;&#xff0c;作为交互的接收者的节点称为目标&#xff08;通常为服务器设备&#xff09;。 节点通过以下方式进行交互&a…

Spring Initial 脚手架国内镜像地址

官方的脚手架下载太慢了&#xff0c;并且现在没有了Java8的选项&#xff0c;所以找到国内的脚手架镜像地址&#xff0c;推荐给大家。 首先说官方的脚手架 官方的脚手架地址为&#xff1a; https://start.spring.io/ 但是可以看到&#xff0c;并没有了Java8的选项。 所以推荐…

3dMax拼图生成工具Puzzle2D使用教程

Puzzle2D for 3dsMax拼图生成工具使用教程 Puzzle2D简介&#xff1a; 2D拼图随机生成器&#xff08;英文&#xff1a;Puzzle2D&#xff09; &#xff0c;是一款由#沐风课堂#用MAXScript脚本语言开发的3dsMax建模小工具&#xff0c;可以随机创建2D可编辑样条线拼图图形。可批量…

【tensorflow学习-选择动作】 学习tensorflow代码调用过程

a actor.choose_action(s) def choose_action(self, s):s s[np.newaxis, :]return self.sess.run(self.action, {self.s: s}) # get probabilities for all actions输入&#xff1a;s 输出&#xff1a;self.sess.run(self.action, {self.s: s}) &#xff1a;a

解决:UnboundLocalError: local variable ‘js’ referenced before assignment

解决&#xff1a;UnboundLocalError: local variable ‘js’ referenced before assignment 文章目录 解决&#xff1a;UnboundLocalError: local variable js referenced before assignment背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使…

MongoDB的原子性和多文档事务处理

原子性和事务处理是数据库操作的核心&#xff0c;保证了数据的准确性。依据数据库原子性&#xff0c;数据库和使用数据库的人员定义事务处理的方式。本文依据Mongodb的官方文档&#xff0c;整理Mongodb数据库的原子性和事务处理方法。 Mongodb的原子操作 Mongodb中&#xff0c…

实战案例:chatglm3 基础模型多轮对话微调

chatglm3 发布了&#xff0c;这次还发了base版本的模型&#xff0c;意味着我们可以基于这个base模型去自由地做SFT了。 本项目实现了基于base模型的SFT。 base模型 https://huggingface.co/THUDM/chatglm3-6b-base由于模型较大&#xff0c;建议离线下载后放在代码目录&#…

OSG编程指南:专栏内容介绍及目录

1、专栏介绍 OpenSceneGraph&#xff08;OSG&#xff09;场景图形系统是一个基于工业标准 OpenGL 的软件接口&#xff0c;它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。本专栏基于 OSG 3.6.5版本进行源码的编写及扩展&#xff0c;也通用于其他OSG版本的…

OpenTelemetry系列 - 第2篇 Java端接入OpenTelemetry

目录 一、架构说明二、方式1 - 自动化2.1 opentelemetry-javaagent.jar&#xff08;Java8 &#xff09;2.2 使用opentelemetry-javaagent.jar完成自动注入2.3 配置opentelemetry-javaagent.jar2.4 使用注解&#xff08;WithSpan, SpanAttribute&#xff09;2.5.1 代码集成WithS…

【栈和队列(2)】

文章目录 前言队列队列方法队列模拟实现循环队列练习1 队列实现栈 前言 队列和栈是相反的&#xff0c;栈是先进后出&#xff0c;队列是先进先出&#xff0c;相当于排队打饭&#xff0c;排第一的是最先打到饭出去的。 队列 队列&#xff1a;只允许在一端进行插入数据操作&…

20、Resnet 为什么这么重要

&#xff08;本文已加入“计算机视觉入门与调优”专栏&#xff0c;点击专栏查看更多文章信息&#xff09; resnet 这一网络的重要性&#xff0c;上一节大概介绍了一下&#xff0c;可以从以下两个方面来有所体现&#xff1a;第一是 resnet 广泛的作为其他神经网络的 back bone&…

Redis集合对象

一. 编码 集合对象的编码可以是intset或者hashtable。 intset编码的集合对象使用整数集合作为底层实现&#xff0c;集合对象包含的所有元素都保存在整数集合里面。 127.0.0.1:6379> sadd numbers 1 3 5 (integer) 3 127.0.0.1:6379> object encoding numbers "ints…

详细学习Pyqt5的10种容器(Containers)

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

Django rest froamwork-序列化关系

关系字段用于表示模型关系。它们可以应用于 ForeignKey、ManyToManyField 和OneToOneField 关系&#xff0c;也可以应用于反向关系和自定义关系&#xff08;如GenericForeignKey&#xff09;。 注意&#xff1a;关系字段是在relations.py中声明的&#xff0c;但按照惯例&#…

使用凌鲨进行内网穿透

为了方便在本地进行开发和调试工作&#xff0c;有时候需要安全地连接内网或Kubernetes集群中的服务。 在net proxy server中可以限制访问用户&#xff0c;也可以设置端口转发的密码。 使用 连接端口转发服务 列出可转发端口 可转发端口是服务端设置的&#xff0c;不会暴露真…

自恋的领导

自恋的领导》&#xff1f;&#xff1f;&#xff1f; 在职场中&#xff0c;我曾经遇到过一位自恋狂的领导。他总是自吹自擂&#xff0c;自我标榜&#xff0c;而且对团队合作态度消极&#xff0c;经常拖后腿。他的言行举止充满了负能量&#xff0c;让人感到非常不舒服。例如&…

13 OAuth2.0实战:微服务接收身份信息

上一节介绍了网关层面的统一认证鉴权,将解析过的身份信息加密放入请求头传递给下游微服务; 那么下游微服务如何接收网关传递的身份信息? 很简单,只需要在每个服务的过滤器中从请求头接收,将其解密。 木谷博客系统中是将该过滤器统一放在blog-common-starter中,这样后续…

锁表的原因及解决办法

引言 作为开发人员&#xff0c;我们经常会和数据库打交道。 当我们对数据库进行修改操作的时候&#xff0c;例如添加字段&#xff0c;更新记录等&#xff0c;没有正确评估该表在这一时刻的使用频率&#xff0c;直接进行修改&#xff0c;致使修改操作长时间无法响应&#xff0…