首页 > 其他分享 >寻找2个有序数组的中位数,暴力解法

寻找2个有序数组的中位数,暴力解法

时间:2022-10-04 19:55:06浏览次数:81  
标签:p2 p3 num2 中位数 解法 数组 nums1 nums2 size

寻找2个有序数组的中位数

[4. 寻找两个正序数组的中位数 - 力扣(LeetCode)][https://leetcode.cn/problems/median-of-two-sorted-arrays/]

double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    int p1 = 0;
	int p2 = 0;
	int p3 = 0;
	int num1 = 0;
	int num2 = 0;
    if(nums1.size()==0&&nums2.size()==0) return 0;
    if(nums1.size()==1&&nums2.size()==1) return(double)(nums1[0]+nums2[0])/2;
    if(nums2.size()==0) {
        if(nums1.size()%2){
            return nums1[nums1.size()/2];
        }
        else return (double)(nums1[nums1.size()/2]+nums1[nums1.size()/2-1])/2;
    }
     if(nums1.size()==0) {
        if(nums2.size()%2){
            return nums2[nums2.size()/2];
        }
        else return (double)( nums2[nums2.size()/2]+nums2[nums2.size()/2-1])/2;
    }
	p3 = (nums1.size() + nums2.size()) / 2;
	while (p3 >=0) {
		if (nums1[p1] > nums2[p2]) {
			--p3;
			if (p3 == 0) {
				num1 = nums2[p2];  
			}
			if (p3 == -1) {
				num2 = nums2[p2];   
				break;
			}
			if (p2 < nums2.size() - 1) ++p2;
			else break;
		}
		else if (nums1[p1] <= nums2[p2]) {
			--p3;
			if (p3 == 0) {
				num1 = nums1[p1];  
			}
			if (p3 == -1) {
				num2 = nums1[p1];   
				break;
			}
			if (p1 < nums1.size() - 1) ++p1;
			else break;
		}
	}
	if (p1 == nums1.size() - 1&&p3>=0) {
		if (p3 > 0) {
			num1 = nums2[p2 + p3 - 1];
			num2 = nums2[p2 + p3];   
		}
		else num2 = nums2[p2];
	}
	else if (p2 == nums2.size() - 1 && p3 >=0 ) {
		if (p3 > 0) {
			num1 = nums1[p1 + p3 - 1];
			num2 = nums1[p1 + p3];   
		}
		else num2 = nums1[p1];
	}
	if ((nums1.size() + nums2.size()) % 2) num1 = num2;   
	return (double)(num1 + num2) / 2;

}

标签:p2,p3,num2,中位数,解法,数组,nums1,nums2,size
From: https://www.cnblogs.com/chunbai11/p/16754323.html

相关文章

  • OFF12 二维数组路径
    1.bfs没法回溯,会出现应该能到达的位置被访问2.多起点structpp{intx;inty;intstep;intvis[10][10];};intdx[4]={0,......
  • 力扣 350. 两个数组的交集 II
     力扣官方题解里的双指针+排序方法里,最后return的值是  Arrays.copyOfRange(intersection,0,index)这里为什么不能直接返回intersection数组:如果定义的数组interse......
  • 把数组排成最小的数
    问题描述:输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3,32,321],则打印出这三个数字能排成的最小数......
  • 数组
    1.一维数组的创建和初始化一维数组在内存中是连续存放的数组的创建:数组是一组相同类型元素的集合。数组的创建方式:type_t  arr_name  [const_n];type_t 是指数组......
  • 数组循环右移2.0
    1.第一次:1,2测试点错误错误原因:忘了m大于n的情况=-=~~第二次:主函数添一个m%n就行~;PS:其他方法1:递归+将最后一个元素保存后,元素整体向前移          2:投机......
  • 【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式
    问题描述想对Azure中全部VM的NSG资源进行收集,如果只是查看一个VM的NSG设定,可以在门户页面中查看表格模式,但是如果想把导出成表格,可以在AzureResourceGraphExplorer中查找......
  • Java手写实现链表队列和数组队列【数据结构与算法】
    packagealgorithm;/**@authorAdministrator@date2022-09-1317:50*/publicclassQueueLinked{privatestaticclassNode{Eitem;Nodenext;publicNode(Eitem,N......
  • LeetCode 20. 有效的括号(超详细超容易理解的动画解法!!!)
    大家好,我是程序员吴师兄,今天跟大家分享一道和栈一、题目描述给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类......
  • 冒泡数组练习
    冒泡排序的思想:两两相邻的元素进行比较,并且可能的话需要交换!#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>voidbubble_sort(intarr[],intsz)/......
  • 一维数组
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>intmain(){charch5[]="bit";charch6[]="'b''i''t'";printf("%d\n",strlen(ch5));......