There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

题目大意:略。中位数:即两个数组中下标为中间的一个。(一开始理解为找数的大小位于中间的一个,晕)

//判断数组是升序还是降序
int sort_direction(int* nums1, int nums1Size, int* nums2, int nums2Size)
{if(nums1Size < 2){if(nums2Size < 2){return 0;}else{return (nums2[0] - nums2[nums2Size-1]);}}else{if(nums2Size < 2){return (nums1[0] - nums1[nums1Size-1]);}else{if(nums1[0] != nums1[nums1Size-1])return (nums1[0] - nums1[nums1Size-1]);elsereturn (nums2[0] - nums2[nums2Size-1]);}}
}double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int *merge = malloc(sizeof(int)*(nums1Size+nums2Size));int *nums11 = malloc(sizeof(int)*(nums1Size+1));int *nums22 = malloc(sizeof(int)*(nums2Size+1));int *p = merge, *n1 = nums11, *n2 = nums22;int i = 0;int drt = sort_direction(nums1,nums1Size,nums2,nums2Size);int tmp;int len = 0;memcpy(nums11, nums1, sizeof(int)*(nums1Size+1));memcpy(nums22, nums2, sizeof(int)*(nums2Size+1));nums11[nums1Size] = (unsigned int)(-1) >> 1;<span style="white-space:pre">  </span>//边界哨兵值nums22[nums2Size] = (unsigned int)(-1) >> 1;//printf("drt:%d\n", drt);memset(merge, 0x0, sizeof(int)*(nums1Size+nums2Size));for(i = 0; i < nums1Size+nums2Size; i++){{tmp = *nums11 < *nums22 ? *nums11++ : *nums22++;*merge++ = tmp;len++;      }}/* printf("len:%d\n", len);for(i = 0; i < nums1Size+nums2Size; i++){printf("%d ", p[i]);}printf("\n");*/return (len%2 ? p[len/2] : (double)(p[len/2-1] + p[len/2])/2);
}

运行时间:24ms ,还可以优化,其他人的最快20ms

[leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数相关推荐

  1. C语言求一个数组中第k大的数,leetcode | Median of Two Sorted Arrays 寻找2个有序数组中第k大的值...

    There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted ...

  2. 20191016:(leetcode习题)寻找两个有序数组的中位数

    寻找两个有序数组的中位数 题目 大致思路 代码实现 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log( ...

  3. LeetCode(Python实现)—寻找两个有序数组的中位数

    4.寻找两个有序数组的中位数 题目大意 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). ...

  4. 算法--------------------寻找两个有序数组的中位数

    题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假设 nums1 和 num ...

  5. Python寻找两个有序数组的中位数

    Python寻找两个有序数组的中位数 审题: 找出意味着这是一个查找算法题 算法复杂度log级别,就是提示你是二分查找 二分查找实现一般为递归 (1)递归包括递归体 (2)终止条件 思路: 定理: 有 ...

  6. 两个有序数组的中位数 python_Python寻找两个有序数组的中位数实例详解

    Python寻找两个有序数组的中位数 审题: 1.找出意味着这是一个查找算法题 2.算法复杂度log级别,就是提示你是二分查找 3.二分查找实现一般为递归 (1)递归包括递归体 (2)终止条件 思路: ...

  7. LeetCode4. 寻找两个有序数组的中位数

    4. 寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假 ...

  8. (JS)寻找两个有序数组的中位数

    寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...

  9. 力扣寻找两个有序数组的中位数

    寻找两个有序数组的中位数 要求 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假 ...

最新文章

  1. SSH隧道 / SSH穿透
  2. 类和对象—对象特性—深拷贝与浅拷贝
  3. VC++多线程编程[转]
  4. 对话腾讯安全杨勇:产业互联网带来哪些新的安全挑战
  5. 资源 | 普通程序员如何自学机器学习
  6. Spark入门(一)单主standalone安装
  7. 如何操作2345浏览器的历史记录
  8. iOS 9之Safari广告拦截器(Content Blocker)
  9. 从源码角度解析ArrayList.subList的几个坑
  10. apache 配置 wss websocket打开握手超时_「Web应用架构」WebSocket介绍和WebSocket API
  11. Java接口和Java抽象类(转,原文已被删除)
  12. arm裸板驱动总结(makefile+lds链接脚本+裸板调试)
  13. 笔记本电脑禁用/启用自带键盘
  14. Python-进制转换
  15. 中国最大的IDC世纪互联是如何成为云计算时代的看客的
  16. 手风琴控件android,手风琴控件 | Accordion Control
  17. 边缘计算:一文理解云边端协同架构中的高性能云计算、边缘计算、云边协同
  18. Datastage性能优化
  19. 人脸搜索项目开源了:人脸识别(M:N)
  20. 汉诺塔实现-PHP版

热门文章

  1. ros openwrt 分流_常平:推进“截污大会战”补贴助力企业雨污分流
  2. plc模拟器软件_你的PLC和触摸屏为什么总是通讯不上?
  3. python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy
  4. C#实现对文件目录的实时监控
  5. Vsphere初试——基本安装
  6. 【24】淘宝sdk——入门实战之左右悬浮模块
  7. HDU 3082 HDOJ 3082 Simplify The Circuit ACM 3082 IN HDU
  8. [转]如何使用 DirectX 診斷工具判斷 DirectX 的版本
  9. ★LeetCode(104)——二叉树的最大深度(JavaScript)
  10. (实用软件分享)屏幕取色器ColorPix