acm问题-Acm 一道数据结构的问题,求思路,不求代码。

问题描述

Acm 一道数据结构的问题,求思路,不求代码。

假设我有两数组,分别有n1 n2个数据(每组数据都不相同)。我要两个数组中各取一个相加,有n1乘n2种结果,从小到大排,取前n个。(如果n1 n2 特别大怎么算),求大神教我。

解决方案

首先将n1 n2按照从小到大的顺序排成两列
最小的肯定是n1[0]+n2[0](下面简写,只用下标,比如n1[0]+n2[0]记作0,0)
稍微大一点的要么是1,0要么是0,1
如果是1,0,那么再大一点的,要么是1,1,要么是2,0
如果是0,1,那么再大一点的,要么是0,2,要么是1,1
也就是前一个最小值的下标左右各加1这两种可能之一
按照这个顺序找。

解决方案二:

好像不对,需要回溯下

解决方案三:

暂时保存下

 using System;
using System.Collections.Generic;
using System.Linq;

public class Test
{
    public static IEnumerable<int> foo(int[] a, int[] b)
    {
        /*
        a = a.OrderBy(z => z).ToArray();
        b = b.OrderBy(z => z).ToArray();
        int x = 0; int y = 0;
        while (x < a.Count() && y < b.Count())
        {
            Console.WriteLine("- {0} {1} {2} {3}", x, y, a[x], b[y]);
            yield return a[x] + b[y];
            if (x == a.Count() - 1) {y++; continue;}
            if (y == b.Count() - 1) {x++; continue;}
            if (a[x] + b[y + 1] < a[x + 1] + b[y])
                y++;
            else
                x++;
        }
        */
        a = a.OrderBy(z => z).ToArray();
        b = b.OrderBy(z => z).ToArray();
        int x = 0; int y = 0;
        while (x < a.Count() && y < b.Count())
        {
            Console.WriteLine("- {0} {1} {2} {3}", x, y, a[x], b[y]);
            yield return a[x] + b[y];
            if (x == a.Count() - 1) {y++; continue;}
            if (y == b.Count() - 1) {x++; continue;}
            if (a[x] + b[y + 1] < a[x + 1] + b[y])
                y++;
            else
                x++;
        }

    }
    public static void Main()
    {
        // your code goes here
        int[] a = {1,2,10,3};
        int[] b = {3,9,8,2,7};
        foreach (int i in foo(a, b))
            Console.WriteLine(i);
        //Console.WriteLine();
        //foreach (int i in (from c in a from d in b select c + d).OrderBy(x => x))
        //  Console.WriteLine(i);
    }
}

解决方案四:

1.分别将两个数组排序,排序方法自选
2.设置一个数据长度为n的数组n3,使用向前搜索的插入法
3.两个数组长度分别为len1和len2,假设len1>len2,
用数组n1*n2 (一个嵌套循环),并向n3插入数据,插入成功返回1,否则返回0_
返回0的则break出内部的循环,为1则继续

第一层循环设置一个标记,记录n1中当前数据乘n2中所有的数时,只要有一个插入数组n3,则标记1,否则为0,
为0时,退出外层循环,此时的数组3中的数据就是那n个数,为1,则继续外层循环

智商不是很够,希望对你有所帮助

解决方案五:

两个数组中的数相加,,我看成乘了,大体还是一样的

解决方案六:

两个数组中的数相加,,我看成乘了,大体还是一样的

解决方案七:

两个数组中的数相加,,我看成乘了,大体还是一样的

时间: 2024-09-30 16:13:54

acm问题-Acm 一道数据结构的问题,求思路,不求代码。的相关文章

php ,ajax 二级联动,求思路,求代码

问题描述 php ,ajax 二级联动,求思路,求代码 用ajax写一个二级联动,不需要数据库,说一下思路,新人求代码 解决方案 类似下面这样,实际多少级联动都差不多,关键事件触发ajax,然后获取数据进行加载http://blog.csdn.net/shunyea/article/details/8443902 数据库http://www.thinksaas.cn/group/topic/346669/ 无数据库 解决方案二: 可以存session,或者存在application(java e

用xml解析word文档,怎样解析,求思路,求代码,以及文档中图片和公式的解析

问题描述 用xml解析word文档,怎样解析,求思路,求代码,以及文档中图片和公式的解析 用xml解析word文档,怎样解析,求思路,求代码,以及文档中图片和公式的解析,请问哪位大神做过??? 解决方案 需求是什么呢?用什么语言,你说的xml解析word文档是什么意思呢? java里面对word文档的操作有POI工具包可以使用.

各位大侠求助,最近在学事件。求思路,求助攻。

问题描述 Form1下我拉了一个panel.并且Form1窗口里有一组数组.一旦数组的元素个数发生改变.则触发panel重画.最近在学委托和事件.头大.求各位大侠指点.跪求求代码,我必认真学习之. 解决方案 解决方案二:不是数组是集合.各位谢谢啦解决方案三:数组内容,不会抛出任何事件.设计中的事件概念,跟你的编程语言所能提供的功能,是不可能完全匹配的.比如说我们说"内存中有一个字节改变了",那么你的编程语言给你设计了这个接口了么?如果没有,那么就不要硬说人家有这个事件--虽然这在设计上

acm-一道二维数组的ACM题,刚开始接触二维数组,求解答

问题描述 一道二维数组的ACM题,刚开始接触二维数组,求解答 这是题目 Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口. "做什么比较挣钱呢?筛沙子没力气,看大门又不够帅..."potato老师很是无奈. "张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?"lwg在一旁出主意. 嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影<回来我的爱&g

编程-ACM题目 求思路 枚举超时·

问题描述 ACM题目 求思路 枚举超时· 解决方案 #include<iostream> using namespace std; long pow(int a,int b){ if(b==0) return 1; return a*pow(a,b-1); } int main(){ long x,y; int countinput=0; while(cin>>x>>y){ countinput++; int count=0; int countsame=0; for(

c语言-求做一道数据结构(C语言的题)

问题描述 求做一道数据结构(C语言的题) 运行文件加密程序,输入要加密的文件名,然后输入密码,最后输入加密后的文件名,程序对文件中读入的每一个字符与密码进行异或,再将异或后的内容倒序写入指定的文件中. 解密程序为加密程序的逆过程. 请使用顺序栈的结构设计并完成程序的功能. 解决方案 http://blog.163.com/chatter@126/blog/static/12766566120101020102247603/ 解决方案二: http://blog.csdn.net/fdipzone

Acm题目,求大神给代码

问题描述 Acm题目,求大神给代码 大神帮做一下..Description 在古堡中有N个房间(N<50000),M条道路,每条道路上均有一个守卫,它可以被一个特定编号的武器消灭,每个房间中也存在一种武器,第i个房间中的武器编号为i,道路在守卫消灭之后方可通行,GX一开始在J房间,他想知道哪些房间经过获得武器并打败守卫的过程,是最终可以去的. Input 第一行是N,J,M 接下来M行,每行三个数A,B,C,分别代表A房间和B房间之间有一条路,且此处守卫可以被编号为C的武器消灭.Output 输

c语言-求帮助写一个代码 刚学习数据结构 实在是搞不懂 求大神帮忙谢谢

问题描述 求帮助写一个代码 刚学习数据结构 实在是搞不懂 求大神帮忙谢谢 好心人帮忙翻译好了 求大神帮忙写一下代码 谢谢大家了 解决方案 你的需求,要至少4000C币,你给的100太少了 解决方案二: http://blog.csdn.net/qq_31766907/article/details/50331951这个链接,你看看,或许能帮到你.

逻辑题-一道算法或者逻辑面试题,求思路

问题描述 一道算法或者逻辑面试题,求思路 100个面值是1-50随机分布的硬币排成一列,你和另一个人一人一个的取,只能从队列头部和尾部取.如何保证最后你取的硬币面值和比你对手多? 解决方案 保证你取倒数第二张? 还是和最大? 1-50 面值按照谁家的硬币? 美元? 美元面值: 现流通硬币有1 分.5 分.10分.1/4 元.1/2 元.1 元六种面值. 正面与背面所铸图案如下: 1 分 - 正面: Lincoln 林肯 ,背面:林肯纪念堂 5 分 - 正面:Jefferson 杰佛逊 ,背面:杰