回溯(m-1个分割点)+M个计数数组count(int[][] count = new int[m][n+1]),一个differentNumberCount数组,记录每个段里不同数字的个数(在第一次回溯之前便可得到每个段的不同数字个数,后续回溯如果是该段i增加了数字j,则count[i][j]是否等于0,等于0则differentNumberCount[i]+1,否则不变;如果该段i减少了数字j,则先判断count[i][j]是否等于1,如果是则differentNumberCount[i]-1,否则不变。当然,某个段增加或减少数字,对应段的该数字的计数也需要+1或-1)