当前位置: 首页 > news >正文

HOT100与剑指Offer

文章目录

  • 前言
  • 一、41. 缺失的第一个正数(HOT100)
  • 二、6. 从尾到头打印链表(剑指Offer)
  • 总结


前言

一个本硕双非的小菜鸡,备战24年秋招,计划刷完hot100和剑指Offer的刷题计划,加油!
根据要求,每一道题都要写出两种以上的解题技巧。

一、41. 缺失的第一个正数(HOT100)

41. 缺失的第一个正数
Note:原地哈希
首先将数组中所有小于等于 0 或大于size 的数修改为 size+1;
遍历数组,开始做标记。如果 ∣x∣∈[1,size],那么给数组中的第 ∣x∣−1 个位置的数添加一个负号。
在遍历完成之后,如果数组中的每一个数都是负数,那么答案是 size +1,否则答案是第一个正数的位置加 1

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int size = nums.size();if (find(nums.begin(), nums.end(), 1) == nums.end())return 1;for (int i = 0; i < size; i++) {if (nums[i] <= 0 || nums[i] > size)nums[i] = 1;}for (int i = 0; i < size; i++) {int num = abs(nums[i]) - 1;nums[num] = -abs(nums[num]);}for (int i = 0; i < size; i++) {if (nums[i] > 0)return i + 1;}return size + 1;}
};

Note:置换解题
我们可以对数组进行一次遍历,对于遍历到的数 x=nums[i],如果 x∈[1,size],我们就知道 x 应当出现在数组中的 x−1 的位置,因此交换 nums[i] 和 nums[x−1],这样 x 就出现在了正确的位置。在完成交换后,新的 nums[i] 可能还在 [1,size]的范围内,我们需要继续进行交换操作,直到 x∉[1,size]。
注意到上面的方法可能会陷入死循环。如果 nums[i]恰好与 nums[x−1] 相等,那么就会无限交换下去。此时nums[i] = x = nums[x−1],说明 x 已经出现在了正确的位置。因此可以跳出循环,开始遍历下一个数。

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int size = nums.size();for (int i = 0; i < size; ++i) {while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {swap(nums[nums[i] - 1], nums[i]);}}for (int i = 0; i < size; ++i) {if (nums[i] != i + 1) {return i + 1;}}return size + 1;}
};

二、6. 从尾到头打印链表(剑指Offer)

从尾到头打印链表

Note:使用栈作为辅助

class Solution {
public:vector<int> printListReversingly(ListNode* head) {stack<int> stk;ListNode* pNode = head;while (pNode != nullptr) {stk.push(pNode->val);pNode = pNode->next;}int sizes = stk.size();vector<int> res(sizes);for (int i = 0; i < sizes; i++) {res[i] = stk.top();stk.pop();}return res;}
};

Note:翻转数组

class Solution {
public:vector<int> printListReversingly(ListNode* head) {vector<int> res;while (head != nullptr) {res.push_back(head->val);head = head->next;}reverse(res.begin(), res.end());return res;}
};

总结

祝大家都能学有所成,找到一份好工作!

http://www.lryc.cn/news/375069.html

相关文章:

  • 【AI开发】CRAG、Self-RAG、Adaptive-RAG
  • FFmpeg中内存分配和释放相关的源码:av_malloc函数、av_mallocz函数、av_free函数和av_freep函数分析
  • 七天进阶elasticsearch[Four]
  • 数据库-数据定义和操纵-DDL语言的使用
  • 黄金价格与美元的关系变了?
  • VB.net与C# 调用InitializeComponent的区别
  • 【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
  • 独立游戏之路:Tap篇 -- Unity 集成 TapTap 广告详细步骤
  • 设计灵感源泉!7个令人赞叹的网页界面设计展示
  • vivado PIN
  • docker部署mysql+nginx+redis
  • python文件操作、文件操作、读写文件、写模式
  • 【亲测可用】docker进入正在运行的容器
  • 线程池吞掉异常的case:源码阅读与解决方法
  • 基于mysqlbinlog恢复数据
  • Android_Android Studio 常用快捷键 for mac
  • [EFI]NUC11电脑 Hackintosh 黑苹果efi引导文件
  • 在Ubuntu上配置和设置防火墙UFW
  • nginx安装环境部署(完整步骤)
  • 如何做电子骑缝章?
  • 2024.6.13 bailuo-Docker 安装与镜像拉取
  • 【Java开发规范】IDEA 设置 text file encoding 为 UTF-8,且文件的换行符使用 Unix 格式
  • 使用`LD_PRELOAD`和`jemalloc`实现C/C++信号的内存堆栈信息收集
  • 计算机组成原理(四)Cache存储器
  • 怎么做成的文件二维码?扫阅览文件的制作方法
  • js 前端 Function.prototype.call.call(0[‘toString‘], *, 16)
  • 李沐:用随机梯度下降来优化人生!
  • Linux 环境.Net程序堆栈查询
  • 志愿服务管理系统的设计
  • 微信小游戏5月畅销榜,新老产品更替显著,亿级爆款频出