面试经典150题刷题记录

devtools/2024/10/18 14:11:53/

数组部分

1. 合并两个有序的子数组 —— 倒序双指针避免覆盖

88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

参考题解:. - 力扣(LeetCode)

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {/* 倒序双指针法:从尾部开始,从而避免覆盖问题 m,n 分别表示 nums1 和 nums2 的元素个数*/  int p1 = m - 1; // 指向第一个数组的最后一个元素int p2 = n - 1; // 指向第二个元素数组的最后一个元素int insert_position = m + n - 1; // 指向要插入的位置while (p2 >= 0) { // nums2 还有要合并的元素// 如果 p1 < 0,那么走 else 分支,把 nums2 合并到 nums1 中if (p1 >= 0 && nums1[p1] > nums2[p2]) {nums1[insert_position--] = nums1[p1--]; // 填入 nums1[p1]} else {nums1[insert_position--] = nums2[p2--]; // 填入 nums2[p1]}}}
}

2. 移除元素 —— 数组末尾元素交换法

27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k
class Solution {public int removeElement(int[] nums, int val) {/**idea & steps:1. 从左往右遍历数组nums,,2. 如果与val相同,则与数组最后一个元素交换,3. 数组长度 -- 4. 注:如果相同了则继续遍历当前元素;(因为当前元素是末尾交换过来的元素,不一定不等于val)5. 结束的条件:当前判断的位置与更改后的数组位置相同*/int cur = 0;  // 起始指针int rear = nums.length - 1; // 终止指针while(cur <= rear) {if(nums[cur] == val) {nums[cur] = nums[rear];rear --;}else {cur ++;}}return cur;}
}


http://www.ppmy.cn/devtools/126738.html

相关文章

Android 禁止App字体随系统大小而更改

运营反馈&#xff0c;老年用户的手机多设置为大字体&#xff0c;在使用我们app过程中&#xff0c;由于字体被放大&#xff0c;导致布局错乱&#xff0c;部分功能按键遮挡&#xff0c;无法正常使用。   收到问题&#xff0c;着手解决&#xff0c;除了对界面布局进行改写&#…

QT--自定义信号槽、信号槽的连接方式、信号槽扩展、一个信号连接两个槽函数、多个信号连接一个槽函数、信号连接信号、断开连接

自定义信号槽 自定义信号和槽的条件&#xff1a; 自定义的类&#xff0c;要继承自 QObject自定义的类&#xff0c;其中要声明一个宏 Q_OBJECT 只有满足了这两个条件才可以正常使用信号槽机制 接下来&#xff0c;我们通过一个案例&#xff0c;演示自定义信号槽的使用。 案例…

python爬虫之使用 Beautiful Soup

Beautiful Soup 是 Python 中用于从 HTML 和 XML 文件中提取数据的库。它通常与 HTTP 请求库&#xff08;如 requests&#xff09;一起使用来构建网络爬虫。以下是一个详细的教程&#xff0c;教你如何使用 Beautiful Soup 来爬取网页内容。 1. 安装必要的库 首先&#xff0c;…

开发中众多框架的个人理解,Unity设计模式,MVC,MVVM框架

前往个人博客&#xff0c;获取更好的阅读体验 开发中众多框架的个人理解 首先&#xff0c;无论使用什么框架&#xff0c;使用什么设计模式&#xff0c;本质都是为了分离逻辑&#xff0c;方便扩展&#xff0c;多人协同。换句话说&#xff0c;就是让代码质量更高; 所以并不需要具…

问:JVM当中的垃圾分类怎么搞?

在Java中&#xff0c;JVM&#xff08;Java虚拟机&#xff09;的垃圾识别与分类是自动内存管理的重要组成部分。这一过程主要通过垃圾收集器&#xff08;Garbage Collector&#xff09;实现&#xff0c;旨在识别和回收不再被程序引用的对象&#xff0c;以释放内存空间。 1. 垃圾…

[k8s理论知识]3.docker基础(二)隔离技术

容器其实是一种沙盒技术&#xff0c;其核心是通过约束和修改进程的动态表现&#xff0c;为其创建一个边界。这个边界确保了应用与应用之间不会相互干扰&#xff0c;同时可以方便在不同的环境中迁移&#xff0c;这是PaaS最理想的状态。 程序是代码的可执行镜像&#xff0c;通常…

极简版Java敏感词检测SDK

敏感词工具 sensitive-word 基于 DFA 算法实现的高性能敏感词工具&#xff0c;开源在GitHub&#xff1a;https://github.com/houbb/sensitive-word。用于敏感词/违禁词/违法词/脏词等的识别和阻拦&#xff0c;是基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。 使用场景…

滚雪球学Redis[5.3讲]:Redis持久化优化深度解析:RDB与AOF的策略选择与实践

全文目录&#xff1a; &#x1f389;前言&#x1f6a6;Redis的监控与报警&#x1f504;1. 使用Redis自带工具进行监控&#x1f3af;1.1 Redis常用监控命令&#x1f3af;1.2 Redis配置文件中的监控相关参数 ⚙️2. 使用第三方工具进行Redis监控&#x1f4a1;2.1 Prometheus与Red…