88. Merge Sorted Array
题目:
Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are mand n respectively.
链接: http://leetcode.com/problems/merge-sorted-array/
题解: 从后向前比较。 Time Complexity - O(m + n), Space Complexity - O(1)。
- public class Solution {
- public void merge(int A[], int m, int B[], int n) {
- while(m > 0 && n > 0){
- if(A[m - 1] >= B[n - 1]) {
- A[m + n - 1] = A[m - 1];
- m --;
- } else {
- A[m + n - 1] = B[n - 1];
- n --;
- }
- }
- while(n > 0){
- A[m + n - 1] = B[n - 1];
- n --;
- }
- }
- }
Update:
- public class Solution {
- public void merge(int[] nums1, int m, int[] nums2, int n) {
- if(nums1 == null || nums2 == null)
- return;
- int k = m - 1, l = n - 1;
- for(int i = m + n - 1; i >= 0; i--) {
- if(k >= 0 && l >= 0)
- nums1[i] = (nums1[k] > nums2[l]) ? nums1[k--] : nums2[l--];
- else if (k < 0)
- nums1[i] = nums2[l--];
- else if (l < 0)
- return;
- }
- }
- }
二刷:
Java:
Time Complexity - O(m + n), Space Complexity - O(1)。
- public class Solution {
- public void merge(int[] nums1, int m, int[] nums2, int n) {
- if (nums1 == null || nums2 == null) {
- return;
- }
- while (m > 0 || n > 0) {
- if (m > 0 && n > 0) {
- nums1[m + n - 1] = nums1[m - 1] > nums2[n - 1] ? nums1[m-- - 1] : nums2[n-- - 1];
- } else if (n > 0) {
- nums1[n - 1] = nums2[n-- - 1];
- } else {
- break;
- }
- }
- }
- }
三刷:
3/18/2016: 这道题在Microsoft onsite第四轮里还真被问到了,赶紧使用二刷的方法秒了。结果最后通过recruiter询问到的feedback是 : coding is rough。翻译过来就是, 写得太糙...... 看来真的不应该用太多的 ++, -- 和tenary operator。所以这一遍老老实实地写。
我们先确定边界条件。然后再m > 0 并且n > 0的情况下对数组nums1进行从后向前地遍历。 当nums1的最后一个元素nums1[m - 1]比nums2的最后一个元素nums2[n - 1]大的时候,nums1[m + n - 1] = nums1[m - 1],并且我们设置m--,比较下一个元素。否则nums[m + n - 1] = nums2[n - 1],n--。 循环结束后,我们判断n是否仍然大于0, 如果是的话,此时m为0, 我们继续更新nums1[n - 1] = nums2[n - 1], n--。
Java:
Time Complexity - O(m + n), Space Complexity - O(1)
- public class Solution {
- public void merge(int[] nums1, int m, int[] nums2, int n) {
- if (nums1 == null || nums2 == null || m < 0 || n < 0) {
- return;
- }
- while(m > 0 && n > 0) {
- if (nums1[m - 1] > nums2[n - 1]) {
- nums1[m + n - 1] = nums1[m - 1];
- m--;
- } else {
- nums1[m + n - 1] = nums2[n - 1];
- n--;
- }
- }
- while (n > 0) {
- nums1[n - 1] = nums2[n - 1];
- n--;
- }
- }
- }
Update:
- public class Solution {
- public void merge(int[] nums1, int m, int[] nums2, int n) {
- if (nums1 == null || nums2 == null || nums1.length == 0) return;
- while (m > 0 && n > 0) {
- if (nums1[m - 1] > nums2[n - 1]) {
- nums1[m + n - 1] = nums1[m - 1];
- m--;
- } else {
- nums1[m + n - 1] = nums2[n - 1];
- n--;
- }
- }
- while (n > 0) {
- nums1[n - 1] = nums2[n - 1];
- n--;
- }
- }
- }
88. Merge Sorted Array的更多相关文章
- Leetcode#88. Merge Sorted Array(合并两个有序数组)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 88. Merge Sorted Array【easy】
88. Merge Sorted Array[easy] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 ...
- LeetCode练题——88. Merge Sorted Array
1.题目 88. Merge Sorted Array——Easy Given two sorted integer arrays nums1 and nums2, merge nums2 into ...
- [LeetCode] 88. Merge Sorted Array 混合插入有序数组
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...
- 【LeetCode】88. Merge Sorted Array (2 solutions)
Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note ...
- LeetCode 88 Merge Sorted Array
Problem: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array ...
- 【LeetCode】88 - Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- LeetCode OJ 88. Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- LeetCode 88. Merge Sorted Array(合并有序数组)
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
随机推荐
- Python计算斗牛游戏的概率
Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...
- 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8.1/WinServer2012R2
.NET Framework 3.5 作为的SQL Server 2012的先决条件,假如使用图形化方式需要使用internet,对于服务器部署时缓慢的一点(需要下载后安装) 以下提供一个使用使用安装 ...
- 数据的增量更新之EXISTS
有时候需要实现是数据的增量更新,因为更新全量会带来时间跟数据库资源的浪费,还有可能是数据出现冗余,所以需要使用增量数据同步,下面是一个数据增量同步的小实例. ---drop table A CREAT ...
- eclipse下mysql编程
mysql -uroot -p 密码 1:如果/usr/include/mysql路径下不存在头文件请: apt-get install libmysql++安装开发包 2:程序中添加头文件<m ...
- gtest功能测试一
一.前言 这篇文章主要总结gtest中的所有断言相关的宏. gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列.一个直观的解释就是: 1. ASSERT_* 系列 ...
- Ubuntu中NetBeans C/C++配置、编译
系统环境:Ubuntu 9.04软件环境:NetBeans 6.7.1 C/C++ .JDK1.6.0_16本次目的:完成NetBeans 6.7.1 C/C++ 的配置工作.编译测试及对中文支持 首 ...
- 类的const成员
类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他 ...
- Week1 Team Homework #3: 软件工程在北航
在组内成员的共同努力,我们采访了几个学长学姐,顺利完成任务.反馈信息如下: 平均每周花在这门课上的时间 平均写的代码总行数 学到的最有用的部分 最没用的部分 <软件工程>最应该改进的地方 ...
- android studio 中设置apk的版本号
今天在mainfest.xml中设置版本号为2,(代码获取到的版本号无效) android:versionCode="2" android:versionName="2. ...
- IIS搭建本地服务器,花生壳实现外网通过域名访问网站
配置服务器 作为一个青年,没有实力,做不出标图所示的服务器. 作为一个学生,买不起服务器 作为一个小孩,买不起域名 但别忘了 作为一个平民玩家,只要有耐心 装备迟早会做出来的 (注:感觉有钱与没钱还是 ...