LeetCode-88. Merge Sorted Array
来源:互联网 发布:网络运营公司赚钱吗 编辑:程序博客网 时间:2024/05/17 08:14
Description:
Note:
Solution(C++):
算法分析:
这道题的意思就是给出了nums1与nums2,然后给了m与n两个参数,要将nums1与nums2中的前m个与n个元素重新排序到nums1中。注意,nums1与nums2事先是已经排序好的。
那么解题思路也挺简单,就是充分利用nums1与nums2已经排序的特点,我们就是要将这m与n个元素重新排序到nums1中前m+n个中。注意一点,nums[i]就是nums中已经大于i个元素了。那么如果
nums1[i]>nums2[j]
就说明nums1[i]这个元素大于nums1中的i个元素,还大于nums2[j],从而也大于nums2中前j个元素,所以这个元素一共大于i+j+1个元素,那么就可以归位了:
nums1[i+j+1]=nums1[i]>nums2[j]?nums[i]:nums2[j];
这就是解决这道题的方法。
程序分析:
承接上面的算法分析,程序要做的是高效整洁的实施算法。既然要循环,可以采用单独的i–与j–,也可以直接“集成”一下,nums1[i–]与nums2[j–]。
int i = m - 1, j = n - 1, tar = m + n - 1; while (j >= 0) { nums1[tar--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--]; }
值得学习的地方有:
- 不管i–还是j–,其实都是i与j其中一个必-1.所以这里直接用tar=m+n-1来替代算法分析中的i+j-1.然后令tar每次循环-1,就有了nums1[tar–]。
- 最难解决的问题就是i–与j–如何保障在减到0后,能不变为负数。当然可以设定循环条件。但是这里厉害在将通常的while(i>=0&&j>=0)分开了。大循环条件只有j>=0,将i>=0作为三目运算条件。当i=0,条件为假,返回让j–的值,就能让i保持i=0,当j=0,循环条件破坏,就很完美。
阅读全文
0 0
- LeetCode 88. Merge Sorted Array
- [LeetCode]88.Merge Sorted Array
- [Leetcode] 88. Merge Sorted Array
- LeetCode --- 88. Merge Sorted Array
- [leetcode] 88.Merge Sorted Array
- [leetcode] 88. Merge Sorted Array
- 88. Merge Sorted Array LeetCode
- 【LeetCode】88. Merge Sorted Array
- LeetCode *** 88. Merge Sorted Array
- LeetCode 88. Merge Sorted Array
- leetcode 88. Merge Sorted Array
- LeetCode 88. Merge Sorted Array
- leetcode-88. Merge Sorted Array
- leetcode 88. Merge Sorted Array
- Leetcode - 88. Merge Sorted Array
- LeetCode 88. Merge Sorted Array
- LeetCode-88.Merge Sorted Array
- Leetcode 88. Merge Sorted Array
- leetcode 539. Minimum Time Difference C++中的stringstream真的很好用
- Javascript
- 名正言顺
- Count Inversions in an array (求数组中的逆序对个数)
- android studio 不支持HttpClient
- LeetCode-88. Merge Sorted Array
- Hbase初始化并根据RowKey获取数据
- 3-1 Point类的构造函数
- 292. Nim Game
- cookie存储及取出时间问题
- bzoj 5091: 摘苹果
- 嵌入式六部曲
- python 第三课
- 设置Hbase的环境变量