力扣刷题31-33(力扣 0024/0070/0053)

今日题目: 

24. 两两交换链表中的节点 

题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)

思路:

看了例子,考虑一下三个的情况下最后一个是否交换,看这个栗子的情况,最后一个不用管,那就简单了。

直接for循环i一步走两个,凉凉交换即可

图解:

代码:

class Solution {
public:void swap_node(ListNode*& pre, ListNode*& p, ListNode*& pnext) {ListNode* pnext_next = pnext->next;pre->next = pnext;pnext->next = p;p->next = pnext_next;}ListNode* swapPairs(ListNode* head) {if (!head || !head->next)return head;ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));dummy->next = head;ListNode* pre = dummy;ListNode* p = head;while (p &&p->next ) {ListNode* pnext = p->next;ListNode* p_next = p->next->next;swap_node(pre, p, pnext);pre = p;p = p_next;}head = dummy->next;return head;}
};

 写代码的时候犯了个sb错误:代码中使用了 malloc 来分配内存,应该使用 free 来释放内存,而不是 delete

在 C++ 中,建议尽量避免使用 mallocfree,而是使用 newdelete 运算符来进行内存分配和释放。

本题over


70. 爬楼梯

题目:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路:

每次你可以爬 1 或 2 个台阶。看到这个就想到了动态规划。

想一下起始条件 :一开始没有楼梯,1种方法,试一下n=0结果,expected 'n' to have value from 1 to 45 only如果只有一层n=1,此时结果也为1,所以两个起始条件n=0,ans=1;n=1;ans=1;

中间过程:

假设跳上n级台阶有 ans(n) 种跳法。在所有跳法中,最后一步只有两种情况: 跳上 1 级或 2 级台阶。

当为 1 级台阶: 剩 n−1 个台阶,此情况共有 ans(n-1) 种跳法。
当为 2 级台阶: 剩 n−2 个台阶,此情况共有 ans(n-2) 种跳法。
即 ans(n)为以上两种情况之和,即 ans(n)= ans(n-1) +ans(n-2).

所以代码如下:
class Solution {
public:int climbStairs(int n) {vector<int>ans(n+1);ans[0]=ans[1]=1;for(int i=2;i<=n;i++){ans[i]=ans[i-1]+ans[i-2];}return ans[n];}
};
注意:

一开始我是按照下面的写法写的结果报错:

 vector<int>ans;ans[0]=ans[1]=1;

Line 1037: Char 34: runtime error: applying non-zero offset 4 to null pointer (stl_vector.h) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1046:34

这个问题就是。在使用 vector<int> ans; 声明向量后,你直接尝试访问 ans[0]ans[1] 来给这两个位置赋值,这是不正确的。因为在声明向量后,它是空的,没有任何元素,所以不能直接通过下标访问元素。

为了解决这个问题,可以使用 push_back 函数向向量中添加元素,或者在声明向量时指定大小。

改正如下:

 vector<int>ans(n+1);ans[0]=ans[1]=1;

又over一道题


53. 最大子数组和

题目:

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。

思考:

首先想到动态规划的方法,找转移方程,因为需要找连续子数组,如果用dp[i]表示i开头的话,不如表示结尾,这样dp[i]存储的就是连续的和,这样dp[i]=(dp[i-1]+nums[i],dp[i]);最后返回最大值.

class Solution {
public:int maxSubArray(vector<int>& nums) {int n=nums.size();vector<int> dp(n);dp[0]=nums[0];for(int i=1;i<n;i++){dp[i]=max(dp[i-1]+nums[i],nums[i]);}sort(dp.begin(), dp.end());return dp[n-1];}
};
改进:

反正都是返回最大值不如直接一个常量+max函数搞定。用dp的话开数组+排序消耗太大。

首先,我们定义一个变量 maxSum 用于存储全局最大子序和,另一个变量 currentSum 用于存储当前子序和,初始值都设为数组中的第一个元素。

接下来,我们遍历数组,对于每个元素,我们更新 currentSummax(currentSum + nums[i], nums[i]),这代表着以当前元素结尾的子序列的最大和。然后,我们将 maxSum 更新为 max(maxSum, currentSum),这样我们就能不断更新全局最大子序和。

class Solution {
public:int maxSubArray(vector<int>& nums) {int maxSum=nums[0];int currentSum= nums[0];for(int i=1;i<nums.size();i++){currentSum=max(nums[i],currentSum+nums[i]);maxSum=max(currentSum,maxSum);}return maxSum;}
};

以上三道题over

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

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

相关文章

Unity DOTS系列之托管/非托管Component的区别与性能分析

最近DOTS发布了正式的版本, 我们来分享一下DOTS里面托管与非托管Component的区别与性能分析&#xff0c;方便大家上手学习掌握Unity DOTS开发。托管与非托管的区别在于是不是基于自动垃圾回收的。托管是由垃圾回收器来负责自动回收&#xff0c;非托管需要我们手动来做相关内存管…

Linux离线安装Docker-Oracle_11g

拉取oracle11g镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g创建11g容器 docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g查看容器是否创建成功 docker ps -a导出oracle容器&#xff0c;查看…

深入探索MySQL高阶查询语句的艺术与实践

目录 引言 一、条件查询 &#xff08;一&#xff09;比较运算符查询 1.使用匹配符号查询 2.范围查找 &#xff08;二&#xff09;逻辑运算符 二、关键字排序 三、分组与聚合函数 四、限制查询 五、别名 &#xff08;一&#xff09;设置列别名 &#xff08;二&#x…

从零学算法212

212.给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同…

@JsonProperty作用

jackson的maven依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.3</version> </dependency>JsonProperty 此注解用于属性上&#xff0c;作用是把该属…

二叉树|530.二叉搜索树的最小绝对差

力扣题目链接 class Solution { private: vector<int> vec; void traversal(TreeNode* root) {if (root NULL) return;traversal(root->left);vec.push_back(root->val); // 将二叉搜索树转换为有序数组traversal(root->right); } public:int getMinimumDiffe…

Mac vue3 使用可选链操作符 ?. 及空值合并操作符 ??编译报错

项目场景&#xff1a; uniapp使用vue3开发&#xff0c;引入uview-plus版本&#xff0c;无法编译通过&#xff08;无法使用可选链操作符 ?. &#xff09; 开发环境&#xff1a; 产品分类&#xff1a; uniapp/App P…

YoloV5改进策略:Block改进|ECA-Net:用于深度卷积神经网络的高效通道注意力|ECA+压缩膨胀Block实现涨点(独家原创)

摘要 本文使用ECA-Net注意力机制配合压缩膨胀的Block实现涨点。涨点方法是我自己独创的&#xff0c;改进方法简单易用&#xff0c;方便大家用于论文的改进。 论文&#xff1a;《ECA-Net&#xff1a;用于深度卷积神经网络的高效通道注意力》 arxiv.org/pdf/1910.03151.pdf 最…

LeetCode215. 数组中的第K个最大元素

题目描述&#xff1a; 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入…

后端系统开发之——功能完善

原文地址&#xff1a;https://blog.yiming1234.cn/?p830 下面是正文内容&#xff1a; 前言 通过SpringBoot开发用户模块的部分也就差不多要结束了&#xff0c;这一片文章就主要提一些在系统开发中需要注意到的细节部分和功能&#xff0c;也就是剩余的部分。 但是这个专栏只介…

echarts数据下钻如何配置

官方范例&#xff1a;https://echarts.apache.org/examples/zh/editor.html?cbar-multi-drilldown 看了一眼范例直接晕了&#xff0c;你这&#xff0c;一堆数据直接写死&#xff0c;这怎么用啊&#xff01; 一般来说&#xff0c;实现步骤是&#xff1a; 1&#xff09;后台&a…

安达发|电子产品制造企业APS生产排程软件

在电子脉动的世界中&#xff0c;时间是芯片上的电流&#xff0c;效率是电路板上的速度。在这个时代&#xff0c;每一微秒都蕴藏着无限可能&#xff0c;每一决策都关乎着企业的生死存亡。APS生产排程软件&#xff0c;是您的电子制造帝国中的智慧大脑&#xff0c;以卓越的创造力&…

Sqoop【实践 02】Sqoop1最新版 全库导入 + 数据过滤 + 字段类型支持 说明及举例代码(query参数及字段类型强制转换)

Sqoop1最新版举例 1.环境说明2.import-all-tables3.query4.字段类型支持 1.环境说明 还是之前的环境&#xff1a; # 不必要信息不再贴出 # JDK [roottcloud ~]# java -version java version "1.8.0_251" # MySQL [roottcloud ~]# mysql -V mysql Ver 14.14 Distrib…

Vue.js:构建高效且灵活的Web应用的利器

在前端开发领域&#xff0c;Vue.js已经迅速崛起并获得了广大开发者的青睐。作为一个轻量级的JavaScript框架&#xff0c;Vue.js不仅易于上手&#xff0c;而且功能强大&#xff0c;能够帮助开发者快速构建高效且灵活的Web应用。本文将带你深入了解Vue.js的核心概念、特性以及它在…

Reactor设计模式和Reactor模型

Reactor设计模式 翻译过来就是反应堆&#xff0c;所以Reactor设计模式本质是基于事件驱动。 角色 Handle&#xff08;事件&#xff09;EventHandler&#xff08;事件处理器&#xff09;ConcreteEventHandler&#xff08;具体事件处理器&#xff09;Synchronous Event Demult…

CTR之Session行为序列建模用户兴趣:DSIN

在前面的文章中&#xff0c;DIN模型 在用户行为序列建模中引入注意力机制来强调加权与target item相关的行为&#xff0c;以实现动态的兴趣表征&#xff1b;而DIEN模型 则在DIN的基础上加入时间性信息&#xff0c;使用注意力机制的GRU来挖掘用户兴趣的演变。 而今天的这篇文章…

jspssm_maven项目——KTV点歌系统

目录 背景 技术简介 系统简介 界面预览 背景 随着互联网的广泛渗透和进步&#xff0c;基于网络技术的KTV点歌系统迅速壮大&#xff0c;其发展始终围绕用户的实际需求展开。通过深入洞察用户的需求&#xff0c;开发出高度定制的管理平台&#xff0c;利用网络的便捷性对系统…

8.软件工程

整个章节偏向于记忆、背诵&#xff1b; 主要议题&#xff1a; 软件体系&#xff1a;3层&#xff1b; UML重点&#xff0c;重点记3要素中的关系、图&#xff1b; 1.软件体系结构 分层 优点&#xff1a;利于软件的重复利用&#xff1b; 缺点&#xff1a;以什么方式分层&#…

音频RK809

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、目的二、知识准备2.1Audio框架2.1.1 DAI2.1.2 CODEC2.1.3 machine三、原理图3.1 整体原理图3.2 喇叭部分3.3 麦克风部分四、设备树4.1 sound 部分4.2 codec 部分五、驱动讲

用友软件公司面试总结

一、自我介绍 二、质询 1. 对本公司的了解&#xff1f; 2. 身边同学对你的印象&#xff0c;认知、评价&#xff1f; 3. 你觉得身边人的评价符合吗&#xff1f; 4. 你觉得你的优点是什么&#xff1f; 5. 哪里人&#xff1f;会粤语吗&#xff1f; 6. 你对公司有多少了解&a…