Leetcode:88. 合并两个有序数组
2019-03-28 10:27
183 查看
题目:
给定两个有序整数数组 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]
my:
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { if(m==0){ for(int i=0;i<n;i++){ nums1[i]=nums2[i]; } } if(m!=0&&n!=0){ //for循环中用分号;不是, for(int i=0;i<n;i++){ //放在大的位置,从最大的开始比 //j>=0,j-- for(int j=m+i-1;j>=0;j--){ if(nums2[i]<nums1[0]){ //移动位置 for(int k=i+m-1;k>=0;k--){ nums1[k+1]=nums1[k]; } //放入 nums1[0]=nums2[i]; break; } if(nums2[i]>=nums1[j]){ for(int k=i+m-1;k>j;k--){ nums1[k+1]=nums1[k]; } nums1[j+1]=nums2[i]; break; } } } } } }
学习
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p = m-- + n-- - 1; //一个一个放,就不用用到麻烦的for循环了。排序好和两个数组的大小确定好后,各个数的位置是能够确定的,从大到小的放,就不用担心覆盖需要保存的问题。 while (m >= 0 && n >= 0) { nums1[p--] = nums1[m] > nums2 ? nums1[m--] : nums2[n--]; } while (n >= 0) { nums1[p--] = nums2[n--]; } }
? :
这个是三元运算符
?左边进行判断,右边进行取值
如果左边是true的话,则取“:”左边的值,如果左边为false的话,则取“:”右边的值。
相关文章推荐
- LeetCode 88. 合并两个有序数组
- LeetCode—88. 合并两个有序数组
- Leetcode88. 合并两个有序数组(python)
- LeetCode 88. 合并两个有序数组(java)
- leetcode 88. 合并两个有序数组
- leetcode88. 合并两个有序数组
- 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】合并两个有序数组