面试经典150题刷题记录

news/2024/10/17 18:35:46/

数组部分

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/news/1539772.html

相关文章

高级算法设计与分析 学习笔记14 FFT

​ 本章我们研究多项式乘法。 我们直接乘&#xff0c;时间复杂度是n^2。使用FFT则可以变成nlgn ​编辑 可以看到两个n的多项式&#xff0c;我们直接乘&#xff0c;每种组合都要试一遍&#xff0c;就会要是n^2遍 ​编辑 那么要怎么加速呢&#xff1f; ​编辑 首先多项式可…

数据结构——八大排序(下)

数据结构中的八大排序算法是计算机科学领域经典的排序方法&#xff0c;它们各自具有不同的特点和适用场景。以下是这八大排序算法的详细介绍&#xff1a; 五、选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每一轮从未排序的元素中选择最小&#xff0…

SparkSQL介绍及使用

文章目录 1. SparkSQL介绍及使用1.1 SparkSQL介绍1.2 数据结构的形式1.3 Spark SQL 特点1.4 Spark SQL 和 Hive SQL关系 1. SparkSQL介绍及使用 1.1 SparkSQL介绍 Spark SQL是Apache Spark 用于处理结构化数据&#xff08;DataFrame和Datasets&#xff09;的模块。 在Spark1.0…

二叉树最小深度(递归)

111. 二叉树的最小深度 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [3,…

微信小程序 - 供应链系统设计

文章目录 一、系统概述二、系统架构设计三、系统安全设计四、系统性能优化五、系统部署与维护 在当今数字化时代&#xff0c;供应链管理对于企业的高效运营至关重要。微信小程序作为一种便捷的移动应用形式&#xff0c;为供应链系统的开发提供了新的机遇。本文将从系统架构设计…

Embedding实现GPT回答和知识库内容相关的内容

现在的gpt应用基本都实现了这个场景的应用&#xff0c;比如&#xff1a; 联网搜索&#xff0c;根据网上找到的内容来回答你的内容&#xff0c;像bing和kimi或者其他AI搜索引擎智能客服&#xff0c;把网站里的内容或者相关的其他什么资料预置到系统中&#xff0c;提高回答的质量…

扫雷(C 语言)

目录 一、游戏设计分析二、各个步骤的代码实现1. 游戏菜单界面的实现2. 游戏初始化3. 开始扫雷 三、完整代码四、总结 一、游戏设计分析 本次设计的扫雷游戏是展示一个 9 * 9 的棋盘&#xff0c;然后输入坐标进行判断&#xff0c;若是雷&#xff0c;则游戏结束&#xff0c;否则…

MySQL-11.DQL-基本查询

一.DQL语句 -- DQL:基本查询 -- 1.查询指定字段 name&#xff0c;entrydate并返回 select name , entrydate from tb_emp;-- 2.查询返回所有字段 select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;select * from tb…