随想录一刷·数组part2

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 1. 有序数组的平方
  • 2. 长度最小的最数组
  • 3. 螺旋数组II

1. 有序数组的平方

有序数组的平方

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int n = nums.size();// 以0为分割线的话,可以将该数组分成两个子数组,并且都是有序的// 直接将双指针分别初始化在 nums 的开头和结尾,相当于合并两个从大到小排序的数组// 这时我们就可以利用合并两个有序数组的方法解决本题了int i = 0, j = n - 1; // 头和尾int p = n - 1;vector<int> res(n);while(i <= j){// 比较绝对值大小if(abs(nums[i]) < abs(nums[j])){res[p] = nums[j] * nums[j];j--;}else{res[p] = nums[i] * nums[i];i++;}p--;}return res;}
};

类似题目:

  1. 合并两个有序数组
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {// 从后向前遍历,因为需要将结果存放到nums1中,从前向后会覆盖原始数据int i = m - 1, j = n - 1; int p = nums1.size() - 1;while(i >= 0 && j >= 0){// 此时有点类似合并两个有序链表的思路if(nums1[i] > nums2[j]){nums1[p] = nums1[i];i--;}else{nums1[p] = nums2[j];j--;}p--;}// 因为本身就是将结果存放到nums1中的,所以只需要考虑nums2中剩余的元素while(j >= 0){nums1[p] = nums2[j];j--;p--;}}
};
  1. 合并两个有序链表
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {// 因为合并两个有序链表会生成一条新链表,所以定义虚拟头节点会更简单ListNode* newnode = new ListNode(-1), *p = newnode;ListNode* p1 = list1, *p2 = list2;while(p1 != nullptr && p2 != nullptr){if(p1->val < p2->val){p->next = p1;p1 = p1->next;}else{p->next = p2;p2 = p2->next;}p = p->next;}    if(p1 != nullptr)p->next = p1;if(p2 != nullptr)p->next = p2;return newnode->next;}
};
  1. 分隔链表
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* partition(ListNode* head, int x) {// 相当于生成了两条链表,一条中元素都小于x,另一条元素都不小于xListNode* newnode1 = new ListNode(-1), *p1 = newnode1;ListNode* newnode2 = new ListNode(-1), *p2 = newnode2;ListNode* p = head;while(p != nullptr){if(p->val < x){p1->next = p;p1 = p1->next;}else{p2->next = p;p2 = p2->next;}p = p->next;}// 将链表2链接到链表1的末尾,记住别忘了将链表2的尾指向空p1->next = newnode2->next;p2->next = nullptr;return newnode1->next;}
};

2. 长度最小的最数组

长度最小的子数组

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {// 因为是正整数数组,没有负数,所以本题可以采用滑动窗口解题int left = 0, right = 0;int windowSum = 0; // 滑动窗口内的子数组和int res = INT_MAX;while(right < nums.size()){windowSum += nums[right];right++;// 判断左侧窗口什么时候收缩while(windowSum >= target && left < right){// 更新结果res = min(res, right - left);windowSum -= nums[left];left++;}}return res == INT_MAX ? 0 : res;}
};

3. 螺旋数组II

螺旋数组II

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n));int num = 1;int upper_bound = 0, lower_bound = n - 1; // 上下边界int left_bound = 0, right_bound = n - 1;  // 左右边界while(num <= n * n) // num{// 上边界,从左往右遍历比较if(upper_bound <= lower_bound){for(int i = left_bound; i <= right_bound; i++){res[upper_bound][i] = num++; // 后置++}// 上边界下移upper_bound++;}// 右边界,从上向下遍历比较if(left_bound <= right_bound){for(int i = upper_bound; i <= lower_bound; i++){res[i][right_bound] = num++;}// 右边界左移right_bound--;}// 下边界,从右往左遍历比较if(upper_bound <= lower_bound){for(int i = right_bound; i >= left_bound; i--){res[lower_bound][i] = num++;}// 下边界上移lower_bound--;}// 左边界,从下向上遍历比较if(left_bound <= right_bound){for(int i = lower_bound; i >= upper_bound; i--){res[i][left_bound] = num++;}// 左边界右移left_bound++;}}return res;}
};

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

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

相关文章

git push超过100MB大文件失败(remote: fatal: pack exceeds maximum allowed size)

push代码的时候&#xff0c;有时会出现如下问题 remote: fatal: pack exceeds maximum allowed size error: failed to push some refs to ‘git.n.xiaomi.com:fuzheng1/nl2sql.git’ 解决方案&#xff1a; 将本地 http.postBuffer 数值调整到GitHub服务对应的单次上传大小配置…

【蓝桥杯选拔赛真题44】python小蓝晨跑 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python小蓝晨跑 一、题目要求 1、编程实现 2、输入输出 二、算法分析

如何将PySpark应用到日常的数据科学工作?

Spark数据处理引擎是一个强大的分析工具&#xff0c;它可以将原始数据转化为有价值的洞察。PySpark是基于Python的API&#xff0c;封装了Spark的核心引擎。它简化了Spark的学习曲线&#xff0c;使得任何在Python数据生态系统中工作的人都能够轻松使用这个强大的工具。 《Python…

如何选择安全又可靠的文件数据同步软件?

数据实时同步价值体现在它能够确保数据在多个设备或系统之间实时更新和保持一致。这种技术可以应用于许多领域&#xff0c;如电子商务、社交媒体、金融服务等。在这些领域中&#xff0c;数据实时同步可以带来很多好处&#xff0c;如提高工作效率、减少数据不一致、提高用户体验…

XUbuntu22.04之simplenote支持的Markdown语法总结(一百九十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

前端出大事儿了

大家好&#xff0c;我是风筝 文章首发于 前端出大事儿了 最近这两天&#xff0c;在前端圈最火的图片莫过于下面这张了。 这是一段 React 代码&#xff0c;就算你完全没用过 React 也没关系&#xff0c;一眼看过去就能看到其中最敏感的一句代码&#xff0c;就是那句 SQL 。 咱…

微信小程序实现微信登录(Java后台)

这两天在自己的小项目中加入了微信小程序的很多功能&#xff0c;今天来说一下关于微信授权登录的部分。 需要的材料 1&#xff1a;一个可以测试的微信小程序 2&#xff1a;此微信小程序的APPID和APPscret 流程 微信用户对应一个小程序都有一个唯一的openid&#xff0c;微信…

Scala基本数据类型和运算符

1.数据类型 1.1 类型支持 Scala 拥有下表所示的数据类型&#xff0c;其中 Byte、Short、Int、Long 和 Char 类型统称为整数类型&#xff0c;整数类型加上 Float 和 Double 统称为数值类型。Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。 数据类型 描述 Byte 8 …

0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows)

大纲 Tumbling Count WindowsmapreduceWindow Size为2Window Size为3Window Size为4Window Size为5Window Size为6 完整代码参考资料 之前的案例中&#xff0c;我们的Source都是确定内容的数据。而Flink是可以处理流式&#xff08;Streaming&#xff09;数据的&#xff0c;就是…

关于Kubernetes——cka认证含金量怎么样?

2019年和2020年&#xff0c;Rancher分别对近1,000名专业人员展开了调查。调查结果表明&#xff0c;Kubernetes在不同行业连续两年保持了90%以上的采用率&#xff0c;而生产环境中的容器采用率从2019年的85%增长至2020年的87%。 SUSE大中华区总裁秦小康表示&#xff1a;“从调研…

进阶|HDR-ISP支持ROS2以及GPU实时处理啦!

引言 之前我们开源了一份HDR-ISP代码供大家入门学习&#xff0c;但很多后台同学反馈CPU版本是实时性不够、对于相机无法实时处理。没关系&#xff0c;今天Cuda加速、支持ROS2可以实时处理的的HDR-ISP GPU版本来啦&#xff01; 此次GPU版本开源版本只提供lib供学习测试&#x…