LeetCode刷题计划----day5

19

力扣链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/
文章讲解链接:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频链接 https://www.bilibili.com/video/BV1QB4y1D7ep/
在这里插入图片描述
暴力解法:

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {for (int i=0;i<nums.size();i++){nums[i]=nums[i]*nums[i];}sort(nums.begin(),nums.end());return nums;}};
class Solution(object):def sortedSquares(self, nums):""":type nums: List[int]:rtype: List[int]"""for i in range(len(nums)):nums[i]=nums[i]*nums[i]nums.sort()return nums

双指针法
数组其实是有序的, 只不过负数平方之后可能成为最大数了。

那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。

此时可以考虑双指针法了,i指向起始位置,j指向终止位置。

定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。

如果A[i] * A[i] < A[j] * A[j] 那么result[k–] = A[j] * A[j]; 。

如果A[i] * A[i] >= A[j] * A[j] 那么result[k–] = A[i] * A[i]; 。

class Solution {
public:vector<int> sortedSquares(vector<int>& A) {int k = A.size() - 1;vector<int> result(A.size(), 0);for (int i = 0, j = A.size() - 1; i <= j;) { // 注意这里要i <= j,因为最后要处理两个元素if (A[i] * A[i] < A[j] * A[j])  {result[k--] = A[j] * A[j];j--;}else {result[k--] = A[i] * A[i];i++;}}return result;}
};
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:l, r, i = 0, len(nums)-1, len(nums)-1res = [float('inf')] * len(nums) # 需要提前定义列表,存放结果while l <= r:if nums[l] ** 2 < nums[r] ** 2: # 左右边界进行对比,找出最大值res[i] = nums[r] ** 2r -= 1 # 右指针往左移动else:res[i] = nums[l] ** 2l += 1 # 左指针往右移动i -= 1 # 存放结果的指针需要往前平移一位return res

双指针法

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int l = 0;int size = nums.size();int r = size - 1;vector<int> res(size);for (int i = size - 1; i >= 0; i--) {if (abs(nums[l]) > abs(nums[r])) {res[i] = nums[l] * nums[l];l++;} else {res[i] = nums[r] * nums[r];r--;}}return res;}
};
class Solution(object):def sortedSquares(self, nums):length = len(nums)l = 0r = length - 1res = [0] * lengthfor i in range(length-1, -1, -1):if abs(nums[l]) < abs(nums[r]):res[i] = nums[r] * nums[r]r -= 1else:res[i] = nums[l] * nums[l]l += 1return res

C++ 中不支持使用变量作为数组长度的声明,而应该使用动态分配的方式来处理,可以使用 vector a(n); 的方式来声明一个大小为 n 的 vector。
python 新列表的定义res = [0] * length


20

在这里插入图片描述
力扣地址:https://leetcode.cn/problems/minimum-size-subarray-sum/

文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE

视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE/?spm_id_from=333.788

暴力解法:

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int result=INT32_MAX;int s;int sum;for(int i=0;i<n;i++){sum=0;for(int j=i;j<n;j++){sum=sum+nums[j];if(sum>=target){s=j-i+1;result=min(s,result);break;}}}return result == INT32_MAX ? 0 : result;}
};
class Solution(object):def minSubArrayLen(self, target, nums):""":type target: int:type nums: List[int]:rtype: int"""n =len(nums)result = float('inf')for i in range(n):sum1=0for j in range(i,n):sum1=sum1+nums[j]if sum1>=target:result=min(j-i+1,result)breakreturn result if result != float('inf') else 0

这里注意在第一层循环后初始化sum1=0,还有Python 中没有 INT32_MAX 这个常量,而是使用 float(‘inf’) 来表示正无穷大。return result if result != float(‘inf’) else 0 return result == INT32_MAX ? 0 : result;注意一下,如果没有就返回0

双指针法

class Solution(object):def minSubArrayLen(self, target, nums):""":type target: int:type nums: List[int]:rtype: int"""n =len(nums)result = float('inf')i=0sum1=0for j in range(n):sum1=sum1+nums[j]while sum1>=target:result=min(j-i+1,result)sum1 -= nums[i]i+=1return result if result != float('inf') else 0

sum1 -= nums[i] 可以将窗口的左边界向右移动一格,同时更新窗口内元素的和

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int result=INT32_MAX;int s;int sum;int i=0;sum=0;for(int j=0;j<n;j++){sum=sum+nums[j];while(sum>=target){s=j-i+1;sum=sum-nums[i];i++;result=min(s,result); }}return result == INT32_MAX ? 0 : result;}
};

21

在这里插入图片描述
这里可以定义四条边,为了处理节点,应该弄成[ ),左闭右开的形式。

在这里插入图片描述

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定义一个二维数组int startx = 0, starty = 0; // 定义每循环一个圈的起始位置int loop = n / 2; // 每个圈循环几次,例如n为奇数3,那么loop = 1 只是循环一圈,矩阵中间的值需要单独处理int mid = n / 2; // 矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)int count = 1; // 用来给矩阵中每一个空格赋值int offset = 1; // 需要控制每一条边遍历的长度,每次循环右边界收缩一位int i,j;while (loop --) {i = startx;j = starty;// 下面开始的四个for就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for (j = starty; j < n - offset; j++) {res[i][j] = count++;}// 模拟填充右列从上到下(左闭右开)for (i = startx; i < n - offset; i++) {res[i][j] = count++;}// 模拟填充下行从右到左(左闭右开)for (; j > starty; j--) {res[i][j] = count++;}// 模拟填充左列从下到上(左闭右开)for (; i > startx; i--) {res[i][j] = count++;}// 第二圈开始的时候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startx++;starty++;// offset 控制每一圈里每一条边遍历的长度offset += 1;}// 如果n为奇数的话,需要单独给矩阵最中间的位置赋值if (n % 2) {res[mid][mid] = count;}return res;}
};
class Solution(object):def generateMatrix(self, n):nums = [[0] * n for _ in range(n)]startx, starty = 0, 0               # 起始点loop, mid = n // 2, n // 2          # 迭代次数、n为奇数时,矩阵的中心点count = 1                           # 计数for offset in range(1, loop + 1) :      # 每循环一层偏移量加1,偏移量从1开始for i in range(starty, n - offset) :    # 从左至右,左闭右开nums[startx][i] = countcount += 1for i in range(startx, n - offset) :    # 从上至下nums[i][n - offset] = countcount += 1for i in range(n - offset, starty, -1) : # 从右至左nums[n - offset][i] = countcount += 1for i in range(n - offset, startx, -1) : # 从下至上nums[i][starty] = countcount += 1                startx += 1         # 更新起始点starty += 1if n % 2 != 0 :			# n为奇数时,填充中心点nums[mid][mid] = count return nums

二维数组定义:
nums = [[0] * n for _ in range(n)]
vector<vector> res(n, vector(n, 0)); // 使用vector定义一个二维数组

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

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

相关文章

【Docker实操】部署php项目

概述 最终达成的容器部署结构和原理如下图&#xff1a; 一、获取nginx、php官方镜像 docker pull nginx //拉取nginx官方镜像 docker pull php:7.4-fpm //拉取php官方镜像需要获取其他可用的php版本&#xff0c;可以上【docker hub】搜索【php】&#xff0c;所有的【xxx-fp…

day39打卡

day39打卡 62. 不同路径 状态表示 我们暂时设dp[i] [j]&#xff1a;以(i, j)为终点&#xff0c;所到达i使用的方法的数量 状态转移方程 从题目中可以看出&#xff0c;dp(i, j)的值取决于dp(i-1, j)和dp(i, j-1)的值&#xff0c;因为机器人只能向右或者向下走。 且我们猜测…

Web安全之浅见

备注&#xff1a;这是我在2017年在自己的网站上写的文章&#xff0c;今天迁移过来。 昨天去参加了公司组织的一个关于网络安全的培训&#xff0c;了解了很多关于网络安全方面的知识&#xff0c;也才意识到网络安全是一项极其重要的领域。 本篇文章主要聊聊Web安全。不过我对于网…

springcloud-seata分布式事务

seata安装配置 下载 下载中心 | Seata 上传到linux 解压seata压缩包 tar -zxvf seata-server-1.6.1.tar.gz nacos配置 创建seata的命名空间 id: seata-id 配置seata 备份application.yml 进入/usr/local/software/springcloud/seata/conf文件夹 备份application.yml mv app…

三十年一个大轮回!日股突破“泡沫时期”历史高点

2月22日周四&#xff0c;英伟达四季报业绩超预期&#xff0c;而且本季度业绩指引非常乐观&#xff0c;提振美股股指期货并成为芯片股和AI概念股情绪的重要催化剂。今日亚洲芯片股和AI股起飞&#xff0c;日本在芯片股的带动下突破1989年泡沫时期以来的历史最高收盘价。 美股方面…

@ControllerAdvice 统一管理异常/错误

ControllerAdvice 统一管理异常/错误 文章目录 ControllerAdvice 统一管理异常/错误一、注意事项二、统一管理异常/错误的好处三、代码实现1. 普通方法2. 统一管理ControllerAdvice3. PostMan测试结果 一、注意事项 1. 如果校验注解不指定 message 属性 ,会返回默认消息, 这些…

【复现】某尔顿 安全审计系统任意文件读取漏洞_56

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 某尔顿网络安全审计产品支持1-3线路的internet接入、1-3对网桥&#xff1b;含强大的上网行为管理、审计、监控模块&#xff1b;用…

[python pip] A new release of pip is available: 23.2.1 -> 24.0

翻译之后&#xff1a;〔通知〕新版本的pip可用&#xff1a;23.2.1->24.0 就是说&#xff0c;你的pip版本需要从当前的 23.2.1 升级到最新版本 24.0&#xff0c;执行如下命令&#xff1a; cmd命令以管理员身份进入目录 ${Python}\Python3.12.1\Scripts下&#xff0c;执行 p…

WEB-UI自动化测试实践

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin

Android横竖屏切换configChanges"screenSize|orientation"避免activity销毁重建&#xff0c;Kotlin 如果不在Androidmanifest.xml设置activity的&#xff1a; android:configChanges"screenSize|orientation" 那么&#xff0c;每次横竖屏切换activity都会…

大蟒蛇(Python)笔记(总结,摘要,概括)——第5章 if 语句

目录 5.1 一个简单的示例 5.2 条件测试 5.2.1 检查是否相等 5.2.2 如何在检查是否相等时忽略大小写 5.2.3 检查是否不等 5.2.4 数值比较 5.2.5 检查多个条件 5.2.6 检查特定的值是否在列表中 5.2.7 检查特定的值是否不在列表中 5.2.8 布尔表达式 5.3 if 语句 5.3.1 简单的if…

idea 打不开项目 白屏

使用IDEA打开项目&#xff0c; 不知名原因崩溃了&#xff0c; 直接出现缩略图白屏。 解决过程&#xff1a; 尝试过重启IDEA&#xff0c;重启过电脑&#xff0c;重新引入相同项目&#xff08;使用不同路径&#xff0c;存在缓存记录&#xff0c;依然打不开&#xff09;&#xff…