算法面试leadcode【经典150道】

news2024/11/16 16:25:23

88 合并两个有序数组

在这里插入图片描述

方法一 使用arraycopy排序
 * 思路一:将nums2合并到nums1的尾部,再直接进行排序。
 * 使用arraycopy(int[]nums1,int m,int[] nums2,int n)
 * 方法来进行排序,
 * 从原数组的哪个位置,移动到原数组的哪个位置,调用了多少个数

在这里插入图片描述

时间复杂度 O(log(n))

空间复杂度 O(1)

方法二 双指针
将nums1复制生成nums1_copy,将nums1分别与nums1_copy和nums2进行比较,如果nums1[i]的值大于等于两者,且nums[i+1]的值大于等于两者,则插入数值到nums1中

题解的解释:

比较指针p1(nums1_copy)与p2(nums2)指向的数字,将较小的数字存入nums1后,p(nums1)指针后移,直到比较完所有数字

问题:p1和p2比较后,不需要和p指针对应的值比较吗?如果大于p指针对应的值,那么p指针不应该后移,而应该继续遍历。???

回答:第一个问题,p1的值就是p的值,只需要p1和p2进行比较。


以下是对上述代码的逐行解释:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 定义两个指针 p1 和 p2,分别用于遍历 nums1 和 nums2
        int p1 = 0, p2 = 0;
        // 创建一个新的数组 sorted 用于存储合并后的有序结果
        int[] sorted = new int[m + n];
        // 用于存储当前要放入 sorted 数组的元素
        int cur;

        // 只要 p1 没有超出 nums1 的有效部分或者 p2 没有超出 nums2 的有效部分,就继续循环
        while (p1 < m || p2 < n) {
            // 如果 p1 已经超出 nums1 的有效部分(即已经遍历完 nums1 的前 m 个元素)
            if (p1 == m) {
                // 则从 nums2 中取当前元素
                cur = nums2[p2++];
            // 如果 p2 已经超出 nums2 的有效部分(即已经遍历完 nums2 的 n 个元素)
            } else if (p2 == n) {
                // 则从 nums1 中取当前元素
                cur = nums1[p1++];
            // 如果 nums1 中当前指针指向的元素小于 nums2 中当前指针指向的元素
            } else if (nums1[p1] < nums2[p2]) {
                // 从 nums1 中取当前元素,并将 p1 指针后移
                cur = nums1[p1++];
            // 否则(nums2 中当前指针指向的元素小于等于 nums1 中当前指针指向的元素)
            } else {
                // 从 nums2 中取当前元素,并将 p2 指针后移
                cur = nums2[p2++];
            }
            // 将当前元素放入 sorted 数组中正确的位置
            sorted[p1 + p2 - 1] = cur;
        }

        // 将合并排序后的结果从 sorted 数组复制回 nums1 数组
        for (int i = 0; i!= m + n; ++i) {
            nums1[i] = sorted[i];
        }
    }
}

这段代码的整体思路是通过比较两个数组的元素,将较小的元素依次放入新的 sorted 数组中,最后再将 sorted 数组的内容复制回 nums1 数组,从而实现两个有序数组合并的功能。

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

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

相关文章

xxl-job适配达梦数据库并制作镜像、源码部署xxl-job

背景&#xff1a;因项目需要信创&#xff0c;需将原本的mysql数据库&#xff0c;改成达梦数据库 一、部署达梦数据库 1.1 部署达梦数据库服务 可参考&#xff1a;Docker安装达梦数据库_达梦数据库docker镜像-CSDN博客 PS&#xff1a;部署达梦数据库时&#xff0c;需加上大小…

Java | Leetcode Java题解之第300题最长递增子序列

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthOfLIS(int[] nums) {int len 1, n nums.length;if (n 0) {return 0;}int[] d new int[n 1];d[len] nums[0];for (int i 1; i < n; i) {if (nums[i] > d[len]) {d[len] nums[i];} else {int…

19. Revit API: Parameter(参数)

一、前言 我们在前面或多或少提到也用到参数了&#xff0c;这篇便细讲一下。 首先&#xff0c;我们知道好多信息都藏在参数里&#xff0c;或者说可以从参数中获取。我们还能够通过调整参数的值&#xff0c;改变模型的形态&#xff0c;即族的参变。 其次&#xff0c;有时族上…

【CAN通讯系列4】CAN通讯如何传递信号?

在【CAN通讯系列3】如何学习CAN通讯&#xff1f;中举了一个例子&#xff1a;新能源汽车要实现驱动功能&#xff0c;先需要整车控制器VCU计算目标转速或扭矩请求等信号&#xff0c;再通过CAN通讯传递给电机控制器MCU&#xff0c;就这个例子继续探讨CAN通讯的基础问题。 1 CAN数据…

入门 PyQt6 看过来(案例)08~ 页面布局

主题&#xff1a;学习页面布局控件以及布局容器的使用&#xff08;理论知识&#xff09; 1 布局控件 PyQt6的布局方式包括绝对布局、水平布局、垂直布局、网格布局和表单布局。 绝对布局&#xff1a;直接设置控件对象在参考坐标中的位置水平布局&#xff1a;对加入的控件对象从…

引用的项目“xxxx/tsconfig.node.json”可能不会禁用发出。

vue3 报错&#xff1a; 引用的项目“xxxx/tsconfig.node.json”可能不会禁用发出。 解决&#xff1a; 进入对应的 json 文件&#xff1a; 修改&#xff1a; "noEmit": false 当 noEmit 设置为 false 时&#xff0c;TypeScript 编译器将根据项目配置生成相应的输出文…

【数据结构初阶】单链表经典算法题十道(详解+图例)—得道飞升(终篇)

hi &#xff01; 目录 9、 环形链表 || 10、随机链表的复制 终章 9、 环形链表 || 【图解】 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode *detectCy…

Live800:客户服务中的情感智能,建立深厚客户关系的秘诀

在当今竞争激烈的市场环境中&#xff0c;客户服务已成为企业脱颖而出的关键因素之一。而情感智能&#xff0c;作为客户服务中的重要组成部分&#xff0c;更是建立深厚客户关系、提升客户满意度的秘诀所在。优秀的客户服务不仅关乎问题的解决&#xff0c;更在于情感的交流与共鸣…

物联网云盒多路开关量模拟量转无线MQTT钡铼技术S275

物联网云盒多路开关量模拟量转无线MQTT技术在现代工业自动化和远程监测中扮演着关键角色。钡铼第四代RTU S275作为一款先进的物联网数据监测采集控制短信报警终端&#xff0c;集成了多种先进技术和功能&#xff0c;旨在提升远程数据采集与控制的效率和可靠性。 钡铼第四代RTU …

在Ubuntu 12.10上安装和使用tmux的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 关于 tmux tmux 是一个终端复用工具。它允许您使用多个虚拟终端访问 tmux 终端。 tmux 利用了客户端-服务器模型&#xff0c;这使您可…

unity3d:TabView,UGUI多标签页组件,TreeView树状展开菜单

概述 1.最外层DataForm为空壳编辑数据用。可以有多个DataForm&#xff0c;例如福利DataForm&#xff0c;抽奖DataForm 2.Menu层为左边栏层&#xff0c;每个DataForm可以使用不同样式的MenuForm预制体 3.DataForm中使用ReorderList&#xff0c;可排列配置 4.有定位功能&#xf…

网址导航系统PHP源码分享

1、采用光年全新v5模板开发后台 2、后台内置8款主题色&#xff0c;分别是简约白、炫光绿、渐变紫、活力橙、少女粉、少女紫、科幻蓝、护眼黑 3、可管理无数引导页主题并且主题内可以进行不同的自定义设置&#xff0c;目前内置16套主题 持续增加中… 4、可单独开发各种插件&a…

【OSCP系列】OSCP靶机-LemonSqueezy(原创)

【OSCP系列】OSCP靶机-LemonSqueezy 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、主机发现 二、端口扫描 1、快速扫描 2、全端口扫描 只有一个80端口 3、版本系统探测 80端口http的apache服务&#xff0…

2年社招冲击字节,一天三面斩获offer

在工作满两年的时间选择了求变&#xff0c;带着运气和实力以社招身份重新看今天的互联网环境&#xff0c;从结果看还是复合预期的。 整个面试的流程还挺快的。周中让招聘专员给投递了简历。问什么时候面试&#xff0c;申请了一个周日&#xff0c;直接安排三面。下周周中就开启…

【神经网络】梯度下降的优化方法【数学公式+代码示例】

文章目录 1、简介2、指数加权平均2.1、公式2.2、代码 3、Momentum⭐3.1、公式演变3.2、代码 4、AdaGrad4.1、计算步骤4.2、代码示例 5、RMSProp5.1、公式5.2、代码5.3、小结 6、Adam6.1、公式和步骤解释⭐6.2、代码⭐6.3、优点 7、何为鞍点8、小结 &#x1f343;作者介绍&#…

Unity3D 转换微信小游戏指引 05 广告内购

Unity3D 转换微信小游戏指引系列&#xff08;第五期 完结&#xff09; 广告 在小程序后台页面找到推广->流量主 开通条件如下&#xff1a; 开通之后&#xff0c;需要接入广告组件。 调用创建广告组件的接口时&#xff0c;需要传入参数 adUnitId&#xff0c;这个是开通流量…

等保测评练习卷20

等级保护初级测评师试题20 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1. 应根据资产的危害程度对资产进行标识管理&#xff0c;根据资产的价值选择相应的管理措施&#xff08;F&#xff09;不是危…

十七、操作符详解(2)

1.操作符 &#xff08;1&#xff09;按位取反~ C语言中&#xff0c;0的符号位是0。 例&#xff1a;int a 0; ~a -1 按二进制补码取反&#xff0c;符号位也要取反&#xff0c;打印的是原码。 把一个数的二进制位的第n位变成1&#xff1a;a a | (1<<n-1) 应用场合 把…

猫头虎分享:图文创作者发布文章之前需要预览哪些内容?

&#x1f4dd; 猫头虎分享&#xff1a;作为创作者发布文章之前&#xff0c;需要预览哪些内容&#xff1f; 摘要 在发布一篇文章之前&#xff0c;预览是一个至关重要的步骤。确保文章的结构完整性、内容的连贯性以及读者的阅读体验&#xff0c;都是我们需要关注的重点。本文将…

OSPF动态路由协议实验

首先地址划分 一个骨干网段分成三个&#xff0c;r1&#xff0c;r2&#xff0c;r5三个环回网段 &#xff0c;总共要四个网段 192.168.1.0/24 192.168.1.0/26---骨干网段 192.168.1.0/28 192.168.1.16/28 192.168.1.32/28 备用 192.168.1.64/28 192.168.1.64/26---r1环回 192.1…