牛客网答题运行时间改善

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hujinglovekmg/article/details/78401989

剑指offer中字符串的排列为例:
1. 题目描述如下:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
2. 输入描述如下:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

思路:
1. 将每个字符串第i(i从1开始)位依次与后面每一位包括自身(假设为k)交换。
2. 每交换一次,从i+1位开始重复1过程。
3. 直到i大于等于字符串的长度时,不再重复,并放入存放排列的数组中。

下面是编码运行结果:
图1-返回值为void-1ms-496k

图1-返回值为void-1ms-496k

图2-返回值void-vectors形参-3ms-496k
图2-返回值void-vectors形参-3ms-496k

图3-返回值为vector-8ms-500k
图3-返回值为vector-8ms-500k

图4-返回值vector-vector形参-14ms-512k
图4-返回值vector-vector形参-14ms-512k

总结:
1. 如图1所示。当迭代返回值为void,并且不使用vector形参时。时间:1ms 空间:496k
2. 如图2所示。当迭代返回值为void,并且使用vector形参时。时间:3ms 空间:496k
3. 如图3所示。当迭代返回值为vector,并且不使用vector形参时。时间:8ms 空间:500k
4. 如图4所示。当迭代返回值为vector,并且使用vector形参时。时间:14ms 空间:512k(经过多次运行发现基本是>=8ms)

由此,我建议:
1. 可以使用void作为返回值的函数,就尽量使用void
2. 迭代尽量使用成员变量作为参数而不使用变量引用

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页