首先,恭喜自己,写的解决改算法的代码,是所有java里面执行最快的。

自己辛苦练习了一周多的数组算法题,终于写出了最优的解决方案。虽然方法有点笨,没有别人写的简单,但是仍然值得鼓励。。

给定两个有序整数数组 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]

我的算法

    public static void merge(int[] nums1, int m, int[] nums2, int n) {if (nums1 == null || nums1.length == 0 || nums1.length < m+n) {return;}if (nums2 == null || nums2.length == 0) {return;}if (m ==0) {for (int i : nums2) {nums1[m++] = i;}return;}// 找到第二个数组应该插入的起始位置  startInset 这个位置开始往后插入数组2的数据。包好startInset 这个位置int startInsert = 0;int nums2Min = nums2[0];while (nums2Min >= nums1[startInsert] && startInsert <m){startInsert++;}// 找到第二个数组应该结束插入的位置   这个位置之后的数组1里面的数据  会被直接挪到最后面  不包含该位置int endInsert = m>=1 ? m -1 : 0;int nums2Max = nums2[n-1];if (nums2Max > nums1[endInsert]) {
//            endInsert = m;}else {while (endInsert >=0 && nums2Max <= nums1[endInsert] ){endInsert--;}}//需要处理有些时候  startInsert 比 endInsert 还要大的问题  该场景是1,2,3,4,5,0  插入数字3 就会出现if (endInsert <=startInsert) {endInsert =startInsert;}/*** 将数组1里面比数组2大的部分  挪到最后*/for (int i = m-1; i > endInsert; i--) {nums1[i+n] = nums1[i];nums1[i] = 0;}/*** 从起始插入位置startInsert 到插入完数组1中最大的数的索引位置之间* 从后往前,插入n1 n2 中比较大的数字*/for (int j =m + n  -(m > endInsert ? (m- endInsert -1) : 0) -1; j>=startInsert;j--){if (endInsert>=0) {if (n>=1 && nums2[n-1] > nums1[endInsert]) {nums1[j]=nums2[n-1];n--;}else {nums1[j] = nums1[endInsert];endInsert--;}}else {if (n>=1 ) {nums1[j]=nums2[n-1];n--;}}}}

网上和我一样快,写法比我简单10倍的解法:

    public void merge(int[] nums1, int m, int[] nums2, int n) {int n1 = m - 1;int n2 = n - 1;int curr = m + n - 1;while(n1 >= 0 && n2 >=0) {if (nums1[n1] >= nums2[n2]) {nums1[curr] = nums1[n1];curr --;n1 --;} else {nums1[curr] = nums2[n2];curr --;n2 --;}}// while(n1 >= 0) {//         nums1[curr] = nums1[n1];//         curr --;//         n1 --;// }while(n2 >= 0) {nums1[curr] = nums2[n2];curr --;n2 --;}}

希望自己变成写下面代码的人!提高自己的思维能力,解决问题的独特的思路的能力。

加油,我想成为算法工程师,架构师。

算法-----数组------合并两个有序数组相关推荐

  1. 两个数组合并排序python_python算法题---合并两个有序数组

    leetcode-python-合并两个有序数组 今天第一次电话面试,有点紧张,所以自己感觉表现的不是很好,面试过程中面试官问到了两个算法题,都是leecode上面的题目,而且我都做过,但是当时一下子 ...

  2. 数组-合并两个有序数组(双指针,从后往前)

    题意: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 ...

  3. 【每日一算法】合并两个有序数组

    每日一算法-搜索插入位置 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...

  4. 【算法】合并两个有序数组【LeetCode】

    文章目录 一.题目 二.说明 三.示例 四.代码实现 1. 思路一: 一.题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有 ...

  5. leetcode算法题--合并两个有序数组

    原题链接:https://leetcode-cn.com/problems/merge-sorted-array/ 尾部双指针 void merge(vector<int>& nu ...

  6. 合并两个有序数组(初级算法合并两个有序数组)

    合并两个有序数组 1.题目: (合并两个有序数组) 2. 示例 3.解答步骤 4. 提交结果(提交用时和内存消耗) 声明: 题目均来自力扣,网址力扣官网, 如有侵权,告知必删! 本题地址: 点击我跳转 ...

  7. 算法刷题打卡第11天:合并两个有序数组

    合并两个有序数组 难度:简单 给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你合并 nums2 到 ...

  8. LeetCode 88合并两个有序数组89格雷编码

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

  9. Leetcode算法题:两个有序数组求中位数

    Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...

最新文章

  1. 想充分利用NFV?Cloud Native是个好方法
  2. 【转】【C#】判断两个文件是否相同
  3. 机器人蛮王_盖伦:吊打我老婆,蛮王:我也是,他:被老婆打的不敢出塔
  4. 颜色和心理年龄测试软件,超准的色彩心理学:选8个颜色,就可以测出你的心理年龄...
  5. 如何查询Oracle性能监控
  6. linux mutex使用检测锁,Linux驱动:互斥锁mutex测试
  7. 通过adb命令安装卸载apk
  8. Java贪吃蛇全代码
  9. 编译 pg_repack
  10. 流程图 选择结构 (一)
  11. 打印出js对象里面的内容
  12. 计算机文档里的圆圈,电脑怎么打出圆圈符号?利用word或者输入法打出圆圈的方法介绍...
  13. Excel表格转为Latex图表
  14. 语音识别开发---基于科大讯飞开放平台
  15. 一文告诉你数据安全平台(DSP)能做什么
  16. 基于php教学信息自助查询系统
  17. 优化游戏以便在 Facebook.com 上运行
  18. 马化腾: 你想想不充钱能不能玩这游戏? 丁磊:你仔细想想不充钱能不能玩这游戏? 张栋:CNM我就问你不充钱能玩我运营的游戏吗?...
  19. COMSOL——LiveLink for MATLAB学习3——奶酪模型
  20. 融资性担保公司VS非融资性担保公司

热门文章

  1. 判断objcet是否是map类型_57、递归+树的深度+map-二叉搜索树的平衡性
  2. C++对象模型6——g++中虚继承的实现
  3. Python进阶5——切片
  4. 带有en的单词有哪些_en为前缀的单词
  5. win10启动修复_win10下以安全模式启动电脑全攻略,装机、修复电脑故障必备
  6. ttlsa教程系列之MySQL---MySQL/Galera集群-多主高可用性负载均衡
  7. HTTP请求中的缓存(cache)机制
  8. Windows下MongoDB安装及创建用户名和密码
  9. 云时代看CRM如何引领企业成功?
  10. Hadoop2.7.3完全分布式搭建