zoukankan      html  css  js  c++  java
  • 【转】从两个排序数列中找到两个数列组合起来中间大的数

    题目:已经两个已经排好序的数组,找出两个数组合起来的中间大的数字。要求算法复杂度尽可能低。如:x数组:1,7,9,10,30    y数组:3,5,8,11    则中间大数为:8


    这个题目看似简单,不过要处理起来还是有很多小细节需要注意的。主要思想就是用两个指针同时遍历两个数字,如果第一个数组的值比第二个的小,就第一个数组向前走,否则第二个数组向前走。如果两个的下标等于中间的下标了,那么输出,如果一个数组遍历完成了,还没有到达中间的下标,则说明中间值在另个数组中,标号为  中间下标减去走完的数组元素总数。

    代码如下:

    #include "stdafx.h"
    #include <iostream>
    #include <deque>
    using namespace std;
    
    int GetMaxValue(int a[], int m, int b[], int n)
    {
        int maxValue = a[0];
        int i = 0, j = 0;
        int midIndex = (m+n)/2;
        while(i < m && j < n)
        {
            if((i+j) == midIndex)
                return maxValue;
    
            if(a[i] > b[j])
            {
                maxValue = a[i];
                j++;
            }
            else
            {
                maxValue = b[j];
                i++;
            }
        }
    
        if(i == m)
        {
            maxValue = b[midIndex - m];
        }
        else
        {
            maxValue = a[midIndex - n];
        }
    
        return maxValue;
    }
                                        
    int main()
    {
        int a[] = {1,3,5,7,9};
        int b[] = {2,500,700,900,1000,2000,3000};
        cout<<GetMaxValue(a,sizeof(a)/sizeof(a[0]),b,sizeof(b)/sizeof(b[0]));
    
    }
  • 相关阅读:
    使用集合组织相关数据
    深入类的方法
    深入C#数据类型
    上机练习1 更新会员积分
    魔兽争霸登录
    jQuery
    打卡系统
    [工具]kalilinux2016.2 更新后
    [技术分享]借用UAC完成的提权思路分享
    [技术分享]利用MSBuild制作msf免杀的后门
  • 原文地址:https://www.cnblogs.com/cyttina/p/2742940.html
Copyright © 2011-2022 走看看