leetcode88. 合并两个有序数组
2019-03-19 13:16
232 查看
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
本题主要在于考察基本的排序算法 思路是先把两个数组合并,然后再排序
方法1 插入排序算法
思路就是 先取第一个元素看作排好序的数组,取第二个元素插入,判断大小选择是否交换位置,然后插入之后,两个元素组成了新的排好序的数组,第三个元素再插入
因此有两层循环,第一层就是选择准备插入的元素,所以遍历原数组,第二层是选择插入位置,所以遍历排好序的数组
实现代码如下
python3
class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ nums1[m:m+n]=nums2 temp = 0 for i in range(1,m+n): for j in range(i): if nums1[j]>nums1[i]: temp = nums1[j] nums1[j] = nums1[i] nums1[i] = temp
C++
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int temp = 0; for(int i=0;i<n;i++) nums1[m+i]=nums2[i]; for(int j=1;j<m+n;j++){ for(int k=0;k<j;k++){ if(nums1[j]<nums1[k]){ temp = nums1[k]; nums1[k] = nums1[j]; nums1[j] = temp; } } } } };
方法2 冒泡排序法
冒泡排序也分为两个循环 外层是控制遍历每一个元素 内层是控制每个元素交换多少次
C++
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int temp = 0; for(int i=0;i<n;i++) nums1[m+i]=nums2[i]; for(int j=0;j<m+n;j++){ for(int k=0;k<m+n-j-1;k++){ if(nums1[k]>nums1[k+1]){ temp = nums1[k]; nums1[k] = nums1[k+1]; nums1[k+1] = temp; } } } }
相关文章推荐
- LeetCode 88. 合并两个有序数组
- LeetCode—88. 合并两个有序数组
- LeetCode 88. 合并两个有序数组(java)
- Leetcode88. 合并两个有序数组(python)
- leetcode 88. 合并两个有序数组
- LeetCode - 88. 合并两个有序数组
- leetcode88. 合并两个有序数组
- LeetCode88. 合并两个有序数组
- Leetcode 88 Merge Sorted Array 合并两个有序数组
- 【LeetCode】[88] 合并两个有序数组
- leetcode之数组类之数组的旋转与分治类-----OJ 189/33/81/153/154 数组旋转 旋转数组搜索 88 有序数组合并 4 两个有序数组寻找第K个元素/中位数 35 寻找插入位置
- c# 88. 合并两个有序数组
- LeetCode刷题指南:合并两个有序数组
- leetcode 合并两个有序数组
- Leetcode题库 ----合并两个有序数组(java语言版)
- (LeetCode刷题)合并两个有序的链表和数组
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 【leetcode】合并两个有序数组
- leetcode刷题88 合并两个有序数组