数组中三个数和为零
前面看到的问题是数组A中,和为固定值sum的两个数。我们一般的做法是先给数组排序,然后数组前后各有一个下标i、j,如果A[i]+A[j]>sum,则j--,如果A[i]+A[j] 有一个类似的扩展问题就是:找到一个是数组中和为零的三个数,一般的解决方法也是设置三个下标变量,i,j和k。每次固定i,然后寻找满足条件的j 和k ;并且需要满足i 如果条件是这三个数不能重复,C++实现的过程可以借助于set容器(set容器可以去掉数组中重复的数字),具体实现方法如下: 该方法并不是此问题最好的解决方案,因为用到了很多STL模板中的容器,只是想进一步学习除了map,vector之外的其他容器的更多使用方法;补充一点基础知识,方便自己以后学习: 1)set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序(set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值)。 2)应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树 3)想要从set中取出指定位置的元素, set转成list可以解决 取的时候只要这样 1 vector<int> FindSumZeroNum(vector<int> A)
2 {
3 set
List list = new ArrayList(B);//B是set型的list.get(0);
参考内容:
https://blog.csdn.net/u010732356/article/details/68926478
https://www.cnblogs.com/caiyishuai/p/8646345.html
https://www.cnblogs.com/omelet/p/6627667.html