前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据量下求N=a+b的组合

大数据量下求N=a+b的组合

作者头像
名字是乱打的
发布2021-12-22 15:00:37
2570
发布2021-12-22 15:00:37
举报
文章被收录于专栏:软件工程软件工程

题目:数组A由1000W个随机正整数(int)组成,设计算法,给定整数n,在A中找出符合如下等式:n=a+b的a和b,说明算法思路以及时间复杂度是多少?

方法一:

设一个辅助容器temp长度为N+1

遍历A,将A中小于等于N的数字填入temp,具体的表现在temp中就是,其下标就是其位置元素的大小

填完之后,遍历temp,找出i位置和n-i位置不为空的,而且这里要防止重复

代码:
代码语言:javascript
复制
    public void printNequalAB(int[] arr,int N){
        //数组A由1000W个随机正整数(int)组成,设计算法,给定整数n,
        // 在A中找出符合如下等式:n=a+b的a和b,说明算法思路以及时间复杂度是多少?
        if (arr==null||N<0){
            return;
        }

        int[] temp=new int[N+1]; //可以放0~N上闭区间的数
        for(int i=0;i<arr.length;i++){
            if (arr[i]<=N){
                if (temp[arr[i]]!=1){
                    temp[arr[i]]=1;
                }
            }
        }//向temp里注入小于N的数,以其数字大小找到其位置


        for(int i=0;i<temp.length;i++){
            if (temp[i]==1&&temp[N-i]==1&&(i<N-i)){//(i<N-i) 去重处理
                System.out.println(i+" "+(N-i));
            }
        }
 }
方法二:双指针法

先排序

然后定义两个指针,根据两端数值大小移动两个指针

前面写过一样的题目了,这里就不重复写了,可以参考下面链接https://cloud.tencent.com/developer/article/2002080

方法三: 利用hash的存取速度为O(1)的特性

1.将数组A中的数据,存入Hash表;

2.遍历A数组,假设当前取到的值为a = Ai,则b = x-Ai;

3.在Hash表中查找b,如果存在则返回,否则继续2-3,直至找到符合要求的解。

时间复杂度O(n)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:
    • 代码:
      • 方法二:双指针法
      • 方法三: 利用hash的存取速度为O(1)的特性
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档