0 0

面试题求解, 高手请入5

求一个一维数组的递增子序列个数,比如[2,3,1,4],有 [2,3],[3,4],[1,4],[2,3,4]四个,函数返回值为4;
时间复杂度,N*logN
2014年9月04日 16:23

5个答案 按时间排序 按投票排序

0 0

这道算法题应该不难,其实他应该就是考虑组合问题,我们其实可以这样分析:
对于一个递增组合来说,后一个值必须要大于前一个值,无论这个组合有多大都必须要满足这样一个条件,那么对于组合[1,2,3,4]来说,对于节点1来说,满足包含1的所有全排列为C(3,1)+C(3,2)+C(3,3)=2^3-1=7. 所以如果我们知道对于数组中的每一个值知道其后面的值比他还大的有几个,那么这个问题就解决了。所以我们必须要有一个对应用于保存这个信息,
如下是简单代码,供参考:

public static void main(String[] args) {
		int[] array = new int[]{
				2,3,1,4
		};
		System.out.println(findCount(array));
	}
	
	public static int findCount(int[] array){
		int[] countArray = new int[array.length];
		// NlogN
		for (int i = 0; i < countArray.length; i++) {
			for (int j = i+1; j < countArray.length; j++) {
				if (array[j] > array[i]) {
					countArray[i] +=1;
				}
			}
		}
		int totalCount = 0;
		for (int i = 0; i < countArray.length; i++) {
			totalCount += ((1 << countArray[i])-1);
		}
		return totalCount;
	}

2014年9月05日 18:36
0 0

public static int getSortNum(int[] a){
        int len = a.length;
        int num = 0;
        int before=0;
        for(int i=0;i<len;i++){
            before = a[i];
            for(int j=i+1;j<len;j++){
                if(before < a[j]){
                    num++;
                    before = a[j];
                }
            }
        }
        return num;
    }

2014年9月05日 09:48
0 0

问题的关键在于:需要知道数组中的每个元素之后,比该数组大的元素有多少个。
比如[2,3,1,4] 能够在N*log(N)复杂度之内计算出 2-->2个, 3 --> 1个, 1-->1个,4 --> 0个。 如果知道了每个元素后面有多少个大于该元素的,那么以该元素开头的顺序序列也是固定的,为大于元素个数的数目(在不允许跨index的情况下)。

基本的思想,利用复杂度为N*LogN的排序,这个是比较容易的,比如快速排序。 但是需要在排序的时候得出每个元素后面有多少个比自己大的。 这里给出一个基于冒泡的(使用快速排序有可能不行)

1. 使用一个Map<元素, 元素后有多少个大于自己的>, 初始化对于Ai为<Ai, N-i>

2.开始冒泡,对于每次交换行为:
     比如Aj <---> Aj+1的交换,将Aj对应的计数减一,即Map.set(Ai,Map.get(Aj) - 1)

3.针对Map中的每个元素, 根据计数的Value确定组合的个数,整体加和即为最终的结果。

思路:初始认为每个元素后面的所有元素都比自己大,每次发生交换行为,则证明比自己大的元素少了一个,这样交换完毕以后就知道有多少个元素比自己大了。

比如[2,3,1,4]初始<(2,3),(3,2),(1,1),(4,0)>
冒泡:2开始, 2,3不交换,3,1交换,1,4不交换,Map为<(2,3),(3,1),(1,1),(4,0)>
            2,1,3,4为交换完毕的数组
      第二轮:2,1交换2,3不交换,3,4不交换,Map为<(2,2),(3,1),(1,1),(4,0)>
           1,2,3,4为交换完毕数组,冒泡完毕。

组合(2,2)计算下来为2个
    (3,1)计算下来为1个
    (1,1)计算下来为1个
    (4,0)计算下来为0个。

共计4个。

复杂度评估:冒泡排序N*Log(N), Map的初始创建为N, Map每次操作为O(1), 因此总体的复杂度为 O(N*Log(N)) * O(1) + N = N * LogN

请题主看下是否可行。

2014年9月05日 09:30
0 0

1.数组排序
2.全排列

2014年9月05日 09:05
0 0

[3,4] 和 [2,3,4] 也算子序列?那[2,4]算不?

问题关键点是可以跳跃的子序列

2014年9月04日 18:35

相关推荐

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云

    云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    个人面试题总结(java,数据库,前端).zip

    文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...

    Android面试题从菜鸟到高手

    就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看 就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看就业参考资料,Android...

    (完整版)运维面试题(含答案).pdf

    (完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...

    【BAT必备】zookeeper面试题

    【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...

    ERP工程师面试题ERP工程师面试题

    ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题

    前端面试题:前端框架面试题大全

    前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    面试题 面试题面试题

    面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题...

    Python面试题及答案共70道.docx

    Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...

    java高级软件工程师面试题大全及答案 含一些公司面试题

    java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助

    最全的IT公司面试题集 CHM版的

    Java面试题,J2EE面试题,.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux...

    c语言 面试题 与c语言有关的面试题 华为笔试题

    c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关...

    H5前端面试大全-包含大厂面试题_25个md文件分类面试题.rar

    这里将收集我做过的所有的前端面试笔试题,并根据自己的理解提供解答,以及一些关于前端找工作方面的经验等。 前端笔试面试题部分 试题链接 原题概述 标签分类 1.md CSS部分 CSS 2.md HTML部分 HTML 3.md FEX ...

Global site tag (gtag.js) - Google Analytics