算法训练 第一周

一、合并两个有序数组

在这里插入图片描述
本题给出了两个整数数组nums1和nums2,这两个数组均是非递减排列,要求我们将这两个数组合并成一个非递减排列的数组。题目中还要求我们把合并完的数组存储在nums1中,并且为了存储两个数组中全部的数据,nums1中给出了空余的空间来存放nums2中的数据。本题的做法有很多,在此我们主要讨论三种解题思路。

1.先合并后排序

我们可以先将nums2中的元素全部拷贝到nums1中的空闲空间中去,然后再将nums1整体排序即可,代码如下:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int i = m;int j = 0;while(i < m + n) {nums1[i++] = nums2[j++];}Arrays.sort(nums1);}
}

2.正序双指针

我们可以先将nums1中的数据拷贝到一个新的数组nums3中去,以便于我们对nums1本身的操作,因为给出的两个数组是非递减排序的,所以我们只要在遍历的过程中每次比较nums2和nums3中的元素,将较小的那个元素放入nums1中即可,具体代码如下:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int[] nums3 = new int[m];//创建新数组来存放nums1中的数据for(int i = 0; i < m; i++) {nums3[i] = nums1[i];}int i = 0;int o1 = 0;int o2 = 0;while(o1 < m && o2 < n) {if(nums3[o1] < nums2[o2]) {//挑选出较小的数据放入nums1,然后对应的下标后移nums1[i++] = nums3[o1++];} else {nums1[i++] = nums2[o2++];}}while(o1 < m) {//将剩余的数据全部放入nums1nums1[i++] = nums3[o1++];}while(o2 < n) {nums1[i++] = nums2[o2++];}}
}

3.倒序双指针

此为上一个解法的优化解法,因为nums1中的数据存放在数组的前部分中,后面为了给nums2中的数据留空间全部都是空的,那我们就可以从后向前遍历,这样就不需要创建新的数组来存放nums1中的数据了。只不过是我们需要每次选取nums1和nums2中较大的那个数据,然后从后向前的存入nums1,代码如下:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int index = m + n - 1;int i = m - 1;int j = n - 1;while(i >= 0 && j >= 0) {if(nums1[i] > nums2[j]) {nums1[index--] = nums1[i--];} else {nums1[index--] = nums2[j--];}}while(j >= 0) {nums1[index--] = nums2[j--];}while(i >= 0) {nums1[index--] = nums1[i--];}}
}

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

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

相关文章

Linux内核学习(十三)—— 设备与模块(基于Linux 2.6内核)

目录 一、设备类型 二、模块 构建模块 安装模块 载入模块 一、设备类型 在 Linux 以及 Unix 系统中&#xff0c;设备被分为以下三种类型&#xff1a; 块设备&#xff08;blkdev&#xff09;&#xff1a;以块为寻址单位&#xff0c;块的大小随设备的不同而变化&#xff1…

golang channel

channel是不同协程之间异步通信的数据结构。 基本用法 1 构造 ch:make(chan int)//无缓冲 ch:make(chan int,10)//有缓冲2 读操作 val:<-ch <-ch val,ok:<-ch3 写 var data int ch<-data4 关闭 close(ch)5 多路复用 select{ case <-parent.Done():child.…

VLAN间路由:单臂路由与三层交换

文章目录 一、定义二、实现方式单臂路由三层交换 三、单臂路由与三层路由优缺点对比四、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、定义 VLAN间路由是一种网络配置方法&#xff0c;旨在实现不同虚拟局域网&#xff08;VLAN&#xff09;之…

数学建模--线性规划方法的Python实现

目录 1.算法求解问题 2.算法求解思路 3.算法求解代码 4.算法求解结果 1.算法求解问题 求min z2x13x2x3 s.t:x14x22x3>83x12x2>6x1,x2,x3>02.算法求解思路 关键函数解释如下: #利用linprogl函数来解决def linprog(c, A_ubNone, b_ubNone, A_eqNone, b_eqNone,boundsN…

Python入门教程 - 基本函数(四)

目录 一、什么是函数 二、自定义函数并使用它 一、什么是函数 前面我们学习了像input()、print()、type()等等&#xff0c;他们都是函数。这些其实是由Python内部帮我们定义好的。我们直接用就可以了。 关于函数&#xff0c;除了用内部定义好的&#xff0c;我们也可以自己定…

[Android 四大组件] --- Service

1 service是什么 Service是Android系统中的四大组件之一&#xff0c;它是一种长生命周期的&#xff0c;没有可视化界面&#xff0c;运行于后台的一种服务程序。 2 service分类 3 service启动方式 3.1 startService显示启动 // AndroidManifest.xml<?xml version"1…

Redis-数据结构及常用命令

字符串(String)数据结构常用命令&#xff1a; SET key value&#xff1a;设置指定 key 的值&#xff1b; GET key&#xff1a;获取指定 key 的值&#xff1b; DEL key&#xff1a;删除指定 key&#xff1b; INCR key&#xff1a;将指定 key 的值增加 1&#xff1b; DECR key&a…

【git】git commit、push之前自动执行脚本

可以使用 Git 的钩子&#xff08;hooks&#xff09;功能。Git 钩子是在特定事件发生时执行自定义脚本的方式。 下面是一个使用 pre-commit 钩子的例子&#xff0c;用于在执行 git commit 之前自动执行脚本&#xff1a; 进入你的 Git 仓库的根目录。进入 .git/hooks 目录&…

NPM 常用命令(二)

目录 1、npm bugs 1.1 配置 browser registry 2、npm cache 2.1 概要 2.2 详情 2.3 关于缓存设计的说明 2.4 配置 cache 3、 npm ci 3.1 描述 3.2 配置 install-strategy legacy-bundling global-style omit strict-peer-deps foreground-scripts ignore-s…

【C++入门】string类常用方法(万字详解)

目录 1.STL简介1.1什么是STL1.2STL的版本1.3STL的六大组件1.4STL的缺陷 2.string类的使用2.1C语言中的字符串2.2标准库中的string类2.3string类的常用接口说明 &#xff08;只讲解最常用的接口&#xff09;2.3.1string类对象的常见构造2.3.2 string类对象的容量操作2.3.3string…

Java8实战-总结17

Java8实战-总结17 引入流流操作中间操作终端操作使用流 小结 引入流 流操作 java.util.stream.Stream中的Stream接口定义了许多操作。它们可以分为两大类。再来看一下前面的例子&#xff1a; List<String> names menu.stream() //从菜单获得流 .filter(d -> d.get…

山西电力市场日前价格预测【2023-09-05】

日前价格预测 预测明日&#xff08;2023-09-05&#xff09;山西电力市场全天平均日前电价为262.11元/MWh。其中&#xff0c;最高日前电价为349.80元/MWh&#xff0c;预计出现在19:30。最低日前电价为0.00元/MWh&#xff0c;预计出现在11:45-14:15。 价差方向预测 1&#xff1a…

LeetCode-39-组合总和

题目链接&#xff1a;LeetCode-39-组合总和 解题思路&#xff1a; 先排序&#xff0c;会节省时间&#xff1b;由于数组中的数字可以无限制重复被选&#xff0c;&#xff0c;因此和前几道题的差别是index不需要1&#xff0c;而是可以继续选择当前的元素 代码实现&#xff1a; cl…

upload-labs靶场通关详解

文章目录 Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20方法一&#xff08;文件夹名欺骗绕过&#xff09;方法二&#xff08;%00截断攻击&#xff09; Pass-21 Pass-01 绕过…

通过HFS低成本搭建NAS,并内网穿透实现公网访问

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 云存储作为一个新概念&#xff0c;在前些年炒的火热&#xff0c;虽然伴随一系列黑天鹅…

LinkedList(4):多线程LinkedList 不安全情况

多线程不安全演示&#xff0c;线程越多&#xff0c;现象越明显&#xff0c;这边只启了四个线程。 package com.example.demo;import java.util.LinkedList; import java.util.UUID;public class LInkedListThread {public static void main(String[] args) {final LinkedList&…

Unity UI与粒子 层级问题Camera depth Sorting Layer Order in Layer RenderQueue

Unity游戏开发中&#xff0c;模型、界面、特效等&#xff0c;需要规划好layer的概念&#xff0c;涉及到摄像机&#xff08;Camera&#xff09;、画布&#xff08;Canvas&#xff09;、Shader等相关内容。 在 Unity 中&#xff0c;渲染顺序是由多个因素共同决定的&#xff0c;大…

JavaScript的let和var的区别

let 和 var 是 JavaScript 中用于声明变量的两个关键字&#xff0c;它们之间有一些重要的区别&#xff1a; 作用域&#xff1a; var 声明的变量具有函数级作用域&#xff0c;这意味着它们在函数内部可见&#xff0c;如果在函数外部访问它们&#xff0c;它们也会存在于函数外部…

[学习笔记] fhq Treap 平衡树

fhq Treap 也叫无旋Treap &#xff08;好像&#xff1f;我也不知道&#xff09; 反正我带旋 Treap 是不会滴&#xff0c;其他的平衡树也不会&#xff08;但是会平板电视&#xff09; fhq Treap 好写&#xff0c;码量小&#xff0c;缺点是常数比较大 定义 二叉搜索树 二叉搜…

【LeetCode】409. 最长回文串

409. 最长回文串&#xff08;简单&#xff09; 方法&#xff1a;哈希表 贪心 思路 不难发现&#xff0c;回文字符串一定是由 若干偶数个字符 至多一个奇数个字符 组成 。我们可以使用一个长度为 128 的 hash表来记录每一个字符的出现次数&#xff0c;当该字符出现了两次&am…