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

面试经典150题刷题记录

数组部分

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.kler.cn/a/354618.html

相关文章:

  • Fastapi + vue3 自动化测试平台(1)--开篇
  • C#中的常用集合
  • CSS Grid 布局全攻略:从基础到进阶
  • 这是什么操作?强制迁移?GitLab 停止中国区用户访问
  • DeepSeek-V3与GPT-4o的对比详解
  • 大数据技术 指令笔记1
  • 代码随想录算法训练营Day28
  • electron-vite_6js-cookie失效
  • react+video:限制快进、倍速、画中画
  • el-table中实现可选表格区域的鼠标事件检测
  • 程序员35+出路何在?
  • 三格电子-Profibus-DP转光纤点对点式【MS-F155-P】
  • springboot+react实现移动端相册(上传图片到oss/ 批量删除/ 查看图片详情等功能)
  • Facebook上的隐私保护:如何加强个人数据的安全性?
  • redis高级数据类型之Geospatial
  • RDK X5/X3 yolov5目标检测从环境搭建到设备集成
  • 深度学习的程序实例
  • MT1331-MT1340 码题集 (c 语言详解)
  • MATLAB垃圾定位和检测识别系统
  • JavaWeb合集-SpringBoot项目配套知识
  • QEMU入门1:ubuntu22.04搭建QEMU运行环境
  • 【python实战】利用代理ip爬取Alibaba海外版数据
  • zabbix 6.4主机名不支持中文的问题优化
  • HTTP vs WebSocket
  • 自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords
  • uni-app uni.setTabBarBadge 不生效