【LC刷题】DAY02:977 209 59

2024-06-07 13:28
文章标签 刷题 59 day02 lc 209 977

本文主要是介绍【LC刷题】DAY02:977 209 59,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#【LC刷题】DAY02:977 209 59

文章目录

    • 977. 有序数组的平方 [link](https://leetcode.cn/problems/squares-of-a-sorted-array/description/)
      • 第一思路:直接排序
      • 优化:双指针
    • 209. 长度最小的子数组 [link](https://leetcode.cn/problems/minimum-size-subarray-sum/description/)
      • 第一思路:
    • 59. 螺旋矩阵 II

977. 有序数组的平方 link

第一思路:直接排序

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {for(int i = 0; i <= nums.size() - 1; i ++  ){nums[i] = nums[i] * nums[i];}sort(nums.begin(),nums.end());return nums;}
};

时间复杂度:时间复杂度:O(nlog⁡n)
空间复杂度:O(log⁡n)

优化:双指针

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int n = nums.size();int negative = -1;for(int i = 0 ; i < n ; i++){if(nums[i] < 0){negative = i;}else{break;}}vector<int> ans;int i = negative, j = negative + 1;while(i >= 0 ||  j < n){if(i < 0){ans.push_back(nums[j] * nums[j]);++j;}else if (j == n){ans.push_back(nums[i] * nums[i]);--i;}else if(nums[i] * nums[i] < nums[j] * nums[j]){ans.push_back(nums[i] * nums[i]);--i;}else{ans.push_back(nums[j] * nums[j]);++j;}}return ans;}
};

时间复杂度:O(n)O(n)O(n)

空间复杂度:O(1)O(1)O(1)

209. 长度最小的子数组 link

第一思路:

class Solution {
public:int minSubArrayLen(int s, vector<int>& nums) {int n = nums.size();if (n == 0) {return 0;}int ans = INT_MAX;vector<int> sums(n + 1, 0); for (int i = 1; i <= n; i++) {sums[i] = sums[i - 1] + nums[i - 1];}for (int i = 1; i <= n; i++) {int target = s + sums[i - 1];auto bound = lower_bound(sums.begin(), sums.end(), target);if (bound != sums.end()) {ans = min(ans, static_cast<int>((bound - sums.begin()) - (i - 1)));}}return ans == INT_MAX ? 0 : ans;}
};

59. 螺旋矩阵 II

class Solution {
public:vector<vector<int>> generateMatrix(int n) {int maxNum = n * n;int curNum = 1;vector<vector<int>> matrix(n, vector<int>(n));int row = 0, column = 0;vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};  // 右下左上int directionIndex = 0;while (curNum <= maxNum) {matrix[row][column] = curNum;curNum++;int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || matrix[nextRow][nextColumn] != 0) {directionIndex = (directionIndex + 1) % 4;  // 顺时针旋转至下一个方向}row = row + directions[directionIndex][0];column = column + directions[directionIndex][1];}return matrix;}
};

时间复杂度:O( n 2 n^2 n2)

空间复杂度:O(1)

这篇关于【LC刷题】DAY02:977 209 59的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039299

相关文章

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0093.%E5%A4%8

【笔记】数据结构刷题09

快速排序 215. 数组中的第K个最大元素 class Solution {public:int findKthLargest(vector<int>& nums, int k) {return divide(nums,0,nums.size()-1,nums.size()-k);}int divide(vector<int>& nums,int left,int right,int k)

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数,其值不超过1000。如果n是非负整数,则该函数必须在一行中打印出n!的值,否则打印“Invalid input”。 首先,知道阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。那么我们先来个简单的阶乘计算吧。 #include<stdio.h>int Fact(int n){if (n <=

【每日刷题】Day112

【每日刷题】Day112 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 2. 面试题 08.01. 三步问题 - 力扣(LeetCode) 3. LCR 088. 使用最小花费爬楼梯 - 力扣(LeetCode) 1. 1137. 第 N 个泰波那契数 - 力扣(LeetCo

javaweb-day02-2(00:40:06 XML 解析 - Dom4j解析开发包)

导入dom4j开发包:dom4j-1.6.1.jar   在工程下建一个文件夹lib,将dom4j-1.6.1.jar拷到里边。右键add to build path。  dom4j-1.6.1\lib文件夹下还有一些jar包,是开发过程中dom4j所需要依赖的jar包,如开发过程中报错,则需导入。   用dom4j怎么做呢? 只要是开源jar包提供给你的时候,它会在开源包里面提供

javaweb-day02-2(XML 解析 - Jaxp的sax方式解析)

Jaxp解析开发包 Sax解析方式只能做查询: Sax解析方式和DOM解析方式的区别:     在使用 DOM 解析 XML 文档时,需要读取整个 XML文档,在内存中构架代表整个DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。  SAX解析允许在读取文档的时候,即对文档进行处

【数据结构】【java】leetcode刷题记录--链表

简介 链表是一种常见的基础数据结构,它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。在Java中,链表通常用于实现动态数据结构,因为它可以根据需要动态地增加或减少节点。 链表简介: 节点结构:链表中的每个元素称为节点(Node),每个节点包含两部分:数据域(存储数据)和指针域(存储下一个节点的地址)动态性:链表的长度不是固定的,可以根据需要动态地增减节点。内存分配:链表中的节点