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]));
    
    }
  • 相关阅读:
    Logstash使用mongodb插件报错: ArgumentError: wrong number of arguments (given 2, expected 1)
    Vim注释行的方法
    设计模式之单例模式
    ssh命令的常用使用场景
    Flask 和Django
    Git 常用命令大全
    实例 静态 类
    python的各种推导式(列表推导式、字典推导式、集合推导式)
    MongoDB
    MySql变量说明
  • 原文地址:https://www.cnblogs.com/cyttina/p/2742940.html
Copyright © 2011-2022 走看看