`

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

阅读更多
从上篇文章我们可以看出寻找两个数和为指定值的较好解法是:
先把数组排序,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]也要快。
分享到:
评论

相关推荐

    【分享面试题一】用友面试时出的几道面试题

    这将实现了功能模块和显示模块的分离,并提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。 3. SQL Server 和 Oracle 中的左联接查询 在SQL Server 中,左联接查询使用left join关键字,而在Oracle...

    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面试题.pdf

    Forward和Redirect是Servlet中两个重要的概念。Forward是容器控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个地址的URL的响应内容读取过来,发送给浏览器,浏览器不知道服务器发送的内容是从...

    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),...

    JavaScript进阶面试题_30题.pdf_前端面试题

    8. 判断两个对象相等:可以使用 JSON.stringify() 方法来判断两个对象是否相等。 9. JavaScript 中的全局函数和全局变量:JavaScript 中有许多全局函数和全局变量,例如 Infinity、NaN、undefined、decodeURI()、...

    腾讯java面试题合集

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

    最新Java面试宝典pdf版

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

    大数据技术之高频面试题.docx

    两个框架的结合使用可以大幅提高大数据处理的效率和性能。 大数据技术的应用 大数据技术的应用非常广泛,包括数据分析、数据挖掘、机器学习、人工智能等多个领域。大数据技术可以帮助企业和组织更好地理解客户需求...

    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方法,还是使用的子类的...

    Java100个面试题.doc

    Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它...

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

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

Global site tag (gtag.js) - Google Analytics