题目题解
题意理解
给定n个整数,对于数组里每一个数字,看它后面所有的数,统计有多少个数字比它小。把所有位置统计出来的数量全部相加,输出这个总和。
样例输入:3个数 3,2,1
* 第一个数3,后面是2、1,两个数都比3小,计数+2
* 第二个数2,后面是1,1比2小,计数+1
* 第三个数1,后面没有数字,计数+0
总和 2+1+0 =3,对应样例输出3。
解题思路
1. 读入n,再把n个数字全部存进一维数组。
2. 设置总求和变量,初始值等于0,用来保存最终答案。
3. 第一层循环,遍历每一个位置i,代表当前要处理的数字。i从第一个元素,一直到倒数第二个元素。最后一个元素后面没有数字,不用处理。
4. 第二层循环,从i的下一个位置开始,遍历i后面全部数字。拿后面每一个数字和a[i]做比较。
5. 如果后面这个数字小于a[i],就给总求和变量加1。
6. 两层循环全部跑完之后,输出总和。
模拟完整样例过程
数组:[3,2,1]
总和初始=0
i=0,数字是3:
j=1,数字2<3 →总和变成1
j=2,数字1<3 →总和变成2
i=1,数字是2:
j=2,数字1<2 →总和变成3
i=2,是最后一个元素,不进入内层循环。
循环结束,输出总和3。
易错点
1. 只看该数字后面的元素,前面的数字不要参与比较。
2. 是统计个数,不是统计数字的差值,满足条件总和+1,不是加上数字本身。
3. 最后一个元素后面没有数,不会产生贡献。
4. n最大300,双重循环完全够用,不用担心超时。
输出要求
只输出最终累加得到的那一个整数。
所以,来看代码: