`

【面试】【扩展】快速寻找满足条件(两个数的和为指定值)的两个数

阅读更多
从上篇文章我们可以看出寻找两个数和为指定值的较好解法是:
先把数组排序,i = 0,j = N-1,这样a[i]+a[j]正好是一个中间数,如果想减小sum的值,就一直缩小j,如果想增加sum的值,就增加i。
设上面的问题算法为getSumNum(int[] a,int sum),arr为数组,sum为和

扩展问题是:如果寻找三个数字或是任意数字呢?

三个数字的想法:
首先还是数组排序,然后从i=0到n-1进行遍历,遍历a[i]时,在剩下getSumNum(arr',sum-a[i])即可。

任意m个数字的想法:
首先数组排序,然后从i=0到n-1个元素遍历,遍历a[i]时,在剩下的n-1个元素中调用getSumNum(a',sum-a[i]),此时为求m-1个元素和为sum-a[i];接下来,同样的方法,从j=0到n-2个元素遍历,遍历a[j]时在arr'上递归调用getSumNum(a'',sum-a[i]-a[j]),此时为求m-2个元素和为sum-a[i]-a[j];依次递归,知道为求2个元素和为sum-?-?-?...时为止。

不论是求3个数字还好是m个数字,总是能比较穷举法少一个数量级n,比先排序然后二分查找求sum-a[i]也要快。
分享到:
评论

相关推荐

    Java面试宝典-经典

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试宝典2010版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    【。net 专业】 面试题

    然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。 12.概述.NET里对 remoting 和 ...

    java面试题大全(2012版)

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    java 面试题 总结

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变...

    java面试宝典2012

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 52 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    J2EE面试题

    2:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 3:用冒泡法对10个数排序(由小到大)例如: 54,12,-6,6,22,-7,9,0,999,79 4:有一个登录页面,上面有用户名(name),...

    腾讯java面试题合集

    答:①ArrayList和LinkedList可想从名字分析,它们一个是Array(动态数组)的数据结构,一个是Link(链表)的数据结构,此外,它们两个都是对List接口的实现。 前者是数组队列,相当于动态数组;后者为双向链表结构,也...

    最新Java面试宝典pdf版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试笔试资料大全

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    JAVA面试宝典2010

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试宝典2012新版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    MySQL在面试中经常被问到.docx MySQL是一个流行的关系型数据库管理系统(RDBMS),在面试中经常被问

    可扩展性:MySQL支持水平和垂直两个方向的扩展。在水平扩展方面,可以通过主从复制、分片和集群等技术来实现可扩展性;在垂直扩展方面,可以通过增加硬件资源来提高MySQL的性能。 数据安全性:MySQL提供了各种安全...

    Java面试宝典2012版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    asp.net面试题

    然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。 12.概述.NET里对 remoting 和 ...

    JAVA基础之java的移位运算

    按位与运算符“&”,如果两个运算数都是1,则结果为1。其他情况下,结果均为零。看下面的例子: 00101010 42 &00001111 15 00001010 10 按位或(OR) 按位或运算符“|”,任何一个运算数为1,则结果为1。如...

    react面试题.md

    上述的React面试题涵盖了React框架的核心概念和常用...5. **props和state:** props和state是React中用于管理数据的两种机制,面试者需要了解它们的区别和作用,以及如何在组件中使用props和state来实现数据的传递和管

    超级有影响力霸气的Java面试题大全文档

     JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要...

Global site tag (gtag.js) - Google Analytics