摘要:
我的思路是给输入的string中每个字符出现次数进行计数,然后按ASCLL码顺序,循环遍历打印出来,每次打印时,记得把字符出现的次数-1。 阅读全文
posted @ 2014-04-12 22:24
echoht
阅读(311)
评论(0)
推荐(0)
摘要:
这道题有几个关键的地方:
1、计算一个数组的逆序对的个数。
我采用遍历的方式,用两重循环,时间复杂度O(N^2),应该没有效率更高的方法【代码27-32】;
2、找到一对(d[j],d[k],设jk),通过交换他们,可以使得逆序对数减少最多。
首先看下交换任意一对(d[j],d[k],设jk),会对这个数组的逆序对的个数造成什么样的影响。认真思考下,可以知道交换(d[j],d[k])只影响在j到k之间的元素的逆序情况,而对这个范围之外的逆序对的个数是不造成影响的,因为[0到j-1]的任意元素相对[j到k]的任意元素的先后顺序,以及[k到len-1]的任意元素相对[j到k]的任意元素的先后顺序都没有变化。那么就只需要考虑交换后[i到j]之间逆序对变化的个数。交换(d[j],d[k])后,减少的逆序对是由下标在[j,k)之间且其元素大于d[k],以及下标在(j,k]之间且其元素小于d[j],而增加的逆序对是由下标在[j,k)之间且其元素小于d[k],以及下标在(j,k]之间且其元素大于d[j]【代码41-51】。另外一个值得注意的是只有当d[k]d[j]时,交换才能减 阅读全文
posted @ 2014-04-12 21:50
echoht
阅读(430)
评论(0)
推荐(0)

浙公网安备 33010602011771号