当前位置: 首页 > wzjs >正文

企业门户网站功能有专门做dnf工作室的网站么

企业门户网站功能,有专门做dnf工作室的网站么,wordpress wp_list_comments,每天做特卖的网站是哪个一. 简介 本文记录一下力扣网上涉及数组的问题:在旋转排序数组中查找目标值。这里主要练习使用双指针或者使用二分查找法解决。 二. 力扣网C语言编程题:寻找两个正序数组的中位数 题目:寻找两个正序数组的中位数 给定两个大小分别为 m 和 …

一. 简介

本文记录一下力扣网上涉及数组的问题:在旋转排序数组中查找目标值。这里主要练习使用双指针或者使用二分查找法解决。

二. 力扣网C语言编程题:寻找两个正序数组的中位数

题目:寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

提示:
    nums1.length == m
    nums2.length == n
    0 <= m <= 1000
    0 <= n <= 1000
    1 <= m + n <= 2000
    -106 <= nums1[i], nums2[i] <= 106

解题思路一:(从前往后 / 双指针,排序合并)

1.  首先,申请一段内存,拷贝数组nums1所有元素;

2. 然后,准备三个指针,从前往后,合并排序(从小到大); 处理剩余元素;

3. 最后,计算中位数;

C语言实现如下:

//寻找两个正序数组的中位数
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int* nums = (int*)malloc((nums1Size+nums2Size)*sizeof(int));int p = 0; //指向拼接后的数组元素int p1 = 0;//指向数组nums1的元素int p2 = 0;//指向数组nums2的元素memcpy(nums, nums1, nums1Size*sizeof(int));//从前往后合并(从小到大)while(p1 < nums1Size && p2 < nums2Size) {//比较大小,最大值存入if(nums1[p1] <= nums2[p2]) {nums[p] = nums1[p1];p1++; }   else { //nums1[p1]>nums2[p2]nums[p] = nums2[p2];p2++;}     p++;}//处理剩余的元素//可能一个数组nums1的元素已排序完,还剩下nums2的元素的情况while(p1 < nums1Size) {nums[p] = nums1[p1];p1++;p++;}while(p2 < nums2Size){nums[p] = nums2[p2];p2++;p++;}double median = 0;if(p % 2 == 0) {median = (nums[p/2]+ nums[p/2-1]) / 2.0;}else {median = nums[p/2];}return median;
}

可以看出,这种解法的时间复杂度为 O(m+n),空间复杂度为 O(m+n)。但是,这种解法不符合题目要求的时间复杂度。

解题思路二:(二分查找法)

二分查找法的时间复杂度为O(log (m+n)) ,所以,其实这里题目要求的二分查找法来解决。

查找两个有序数组合并后中位数可以转换为寻找两个数组中第 k 小的元素。

对于有序数组nums1和 nums2,假设两个数组元素个数分别为 m,n。

中位数与第k小元素的关系:

中位数本质上是求第 k小元素的特例:

当两个数组长度和m+n为奇数时,中位数 = 第 (m+n)/2+1小的元素(从1开始);

当两个数组长度和m+n为偶数时,中位数 = 第 (m+n)/2 小的元素 + 第 (m+n)/2+1 小的元素] / 2.0;

算法核心思想

1. 问题分解:

每次比较两个数组第 [k/2]个元素:

    若 nums1[k/2-1] < nums2[k/2-1],说明 nums1 的前 k/2 个元素都不可能是第 k 小元素,可排除。
    反之,排除 nums2 的前 k/2 个元素。
    通过不断排除元素,将问题规模缩小为原来的一半。

2. 递归排除:
nums1[i-1] > nums2[j-1] → 排除nums2的前j个元素
nums1[i-1] <= nums2[j-1] → 排除nums1的前i个元素
3. 边界处理:

当某个数组为空时,直接返回另一个数组的第 k 小元素。

当 k=1 时,返回两数组当前首元素的最小值。

C语言实现如下:

//二分查找法
int find_kth_smallest(int* nums1, int m, int* nums2, int n, int k) {//保证数组nums1是最短数组,减少递归次数if(m > n) {return find_kth_smallest(nums2, n, nums1, m, k);}//处理边界//1. 数组nums1为空,nums2不为空的情况//返回数组nums2的中位数if(m == 0){return nums2[k-1];}//2. k=1的情况if(k == 1){return (nums1[0] < nums2[0])? nums1[0]: nums2[0];}//计算分割点:比较两个数组的第k小的元素int i = ((k / 2) > m) ?  m : k/2; // nums1的分割点,防止越界int j = ((k / 2) > n) ?  n : k/2; // nums2的分割点,防止越界//比较nums1[k/2]和nums2[k/2]大小,排除较小的数组的第k/2小的元素if(nums1[i-1] < nums2[j-1]) {//排除数组nums1中前i个元素,在剩余元素中继续查找第 k-i小的元素return find_kth_smallest(nums1+i, m-i, nums2, n, k-i);}else{ //nums1[i] >= nums2[j]//排除数组nums2中前j个元素,在剩余元素中继续查找第 k-j小的元素return find_kth_smallest(nums1, m, nums2+j, n-j, k-j);}
}double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int elements_cnt = nums1Size+nums2Size;double median;if(elements_cnt % 2 != 0) { //奇数个元素median = find_kth_smallest(nums1, nums1Size, nums2, nums2Size, elements_cnt/2+1);}else{ //偶数个元素int element1 = find_kth_smallest(nums1, nums1Size, nums2, nums2Size, elements_cnt/2);int element2 = find_kth_smallest(nums1, nums1Size, nums2, nums2Size, elements_cnt/2+1);median = (element1+element2) / 2.0;}return median;
}

这个解法满足题目要求了,算法的时间复杂度为 O(log(m+n))。


文章转载自:

http://M9NeTXqI.hrrmb.cn
http://GgUpZ93Y.hrrmb.cn
http://hYxg8GUw.hrrmb.cn
http://7gHUjnCN.hrrmb.cn
http://8dNJB7m9.hrrmb.cn
http://ZH1OyZx3.hrrmb.cn
http://tqIq0m5A.hrrmb.cn
http://kpsK9HIi.hrrmb.cn
http://Dbkonhhx.hrrmb.cn
http://tGjXdTql.hrrmb.cn
http://KK8EIMqC.hrrmb.cn
http://6Kra3jft.hrrmb.cn
http://X2hGyTeg.hrrmb.cn
http://RIkowDil.hrrmb.cn
http://5Su53LEm.hrrmb.cn
http://L9uXaU4U.hrrmb.cn
http://9InBx2NG.hrrmb.cn
http://zG8H2Jql.hrrmb.cn
http://vNWKSXYS.hrrmb.cn
http://nst4WS30.hrrmb.cn
http://WmzzzHac.hrrmb.cn
http://JdUCwq9d.hrrmb.cn
http://TvFtdbRg.hrrmb.cn
http://xhOx4Tvq.hrrmb.cn
http://py5EHfms.hrrmb.cn
http://gdcMwMl9.hrrmb.cn
http://jh9Iu5HS.hrrmb.cn
http://00w6rf3d.hrrmb.cn
http://pn66UX5k.hrrmb.cn
http://MxRFLLZD.hrrmb.cn
http://www.dtcms.com/wzjs/611729.html

相关文章:

  • 机械网站优化网站显示搜索框
  • 工信部网站备案系统怎么注册雅布设计有多牛
  • 有域名怎么建设网站wordpress 后台栏目
  • 做网站很忙吗wordpress3.1
  • 网站建设蛋蛋28大连建设网站制作
  • 北京网站制作推广样asp.net做网站
  • 网站建设与维护模拟一windows wordpress固定链接
  • 烟台网站制作计划网亿(深圳)信息科技有限公司
  • 英文企业网站建站网站编辑建设
  • 郑州 制造 网站企业做网站和开展电子商务的好处
  • 网站建设到上线步骤装修软件排行榜前十名
  • 衡水稳定的网络建站wordpress反应
  • 黔南州建设局门户网站北京最大公司排名
  • 苏州网站制作聚尚网络四川酒店网站建设
  • ups国际快递网站建设设计店面装修
  • 如何做京东优惠券网站怎样做吧网站排名做上去
  • 男女做爰网站建设官网入口
  • 网站新建设请示微信平台开发
  • 网站开发安装环境广东网站备案审核时间
  • 恐怖音乐怎么做的视频网站湖南省郴州市汝城县
  • 黑龙江省建设安全网站建筑工程网络数据安全管理系统
  • 档案室建设网站建筑木模板厂家
  • 外国人做那个视频网站吗广州php网站建设
  • 安徽服饰网站建设做投票网站
  • 药品在网站上做标签有哪些分类阳江本地网络平台
  • 北京手机网站建设报价wordpress安卓
  • 做品牌网站的明年做啥网站能致富
  • 潜江做网站的公司有哪些网站的备案
  • 爱网站搭建网页网站导读怎么做
  • 集团微网站建设济南快速排名