Highest cardinality grouping of contiguous integers with minimum-sum threshold
Java (JDK), 1248 bytes



import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class TestCG{
&#9;public static void main(String [] args) {
&#9;&#9;int [] input = new int[] {1,4,12,6,20,10,11,3,13,12,4,4,5};
&#9;&#9;int threshold = 12;
&#9;&#9;List&lt;List&lt;Integer&gt;&gt; groups = new ArrayList&lt;&gt;();
&#9;&#9;
&#9;&#9;int currentGroupSum = 0;
&#9;&#9;int previousGroupSum = 0;
&#9;&#9;
&#9;&#9;int maxGroupSum = 0;
&#9;&#9;int boundaryValue = 0;
&#9;&#9;List&lt;Integer&gt; currentGroup =  new ArrayList&lt;&gt;();
&#9;&#9;
&#9;&#9;for(int i=0; i&lt;input.length; i++) {
&#9;&#9;&#9;currentGroup.add(input[i]);
&#9;&#9;&#9;currentGroupSum+=input[i];
&#9;&#9;&#9;
&#9;&#9;&#9;if(currentGroupSum&gt;=threshold) {
&#9;&#9;&#9;&#9;if(i&lt;input.length-1) {
&#9;&#9;&#9;&#9;&#9;boundaryValue = input[i+1];
&#9;&#9;&#9;&#9;}
&#9;&#9;&#9;&#9;
&#9;&#9;&#9;&#9;if(currentGroupSum&gt;maxGroupSum) {
&#9;&#9;&#9;&#9;&#9;maxGroupSum = currentGroupSum;
&#9;&#9;&#9;&#9;}
&#9;&#9;&#9;&#9;
                if(currentGroupSum &gt; previousGroupSum &amp;&amp; (currentGroupSum - boundaryValue)&gt;=threshold) {
                 &#32;
                &#9;groups.get(groups.size()-1).add(boundaryValue);
                &#9;currentGroup.remove(0);
                }
&#9;&#9;&#9;&#9;
&#9;&#9;&#9;&#9;previousGroupSum = currentGroupSum;
&#9;&#9;&#9;&#9;
&#9;&#9;&#9;&#9;
&#9;&#9;&#9;&#9;currentGroupSum = 0;
&#9;&#9;&#9;&#9;groups.add(currentGroup);
&#9;&#9;&#9;&#9;currentGroup = new ArrayList&lt;&gt;();
&#9;&#9;&#9;}
&#9;&#9;}
&#9;&#9;System.out.println(groups.size());&#9;
&#9;&#9;
&#9;&#9;for(List&lt;Integer&gt; group : groups) {
&#9;&#9;&#9;System.out.println(group);
&#9;&#9;}
&#9;}

}


Try it online!

Complexity O(n)