如何解决如何计算此代码的空间和时间复杂度
public static int desc(int number) {
// Time complexity = 2n+n2
// space complexity = ?
int i,j,temp;
int array[] = new int[Integer.toString(number).length()];
for (i = 0; i < array.length; i++)
array[i] = Integer.toString(number).charat(i) - '0';
for (i = 0; i < array.length - 1; i++) {
for (j = 0; j < array.length - i - 1; j++) {
if (array[j] < array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
StringBuilder strNum = new StringBuilder();
for (int k : array) {
strNum.append(k);
}
int finalInt = Integer.parseInt(strNum.toString());
System.out.println(finalInt);
return finalInt;
}
这是我的代码,根据我的理解我能够计算时间复杂度请建议时间复杂度是否正确,并帮助我计算这个程序的空间复杂度我有点对如何计算空间复杂度感到困惑。
解决方法
首先让我们优化您的代码:
int array[] = new int[Integer.toString(number).length()];
for (i = 0; i < array.length; i++)
array[i] = Integer.toString(number).charAt(i) - '0';
到:
String to_number = Integer.toString(number);
int array[] = new int[to_number.length()];
for (i = 0; i < array.length; i++)
array[i] = to_number.charAt(i) - '0';
无需多次调用 Integer.toString(number)
。
作为 N
参数中的位数number(即 Integer.toString(number).length()
)时间复杂度可以计算如下:
String to_number = Integer.toString(number);
具有 N
的时间复杂度,对于:
for (i = 0; i < array.length; i++)
array[i] = to_number.charAt(i) - '0';
后续双循环:
for (i = 0; i < array.length - 1; i++) {
for (j = 0; j < array.length - i - 1; j++) {
if (array[j] < array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
是一个 well-know for being N(N-1)/2
,可以简化为 O(N^2)
的时间复杂度。下一个循环
for (int k : array) {
strNum.append(k);
}
的时间复杂度为 N
。最后,
int finalInt = Integer.parseInt(strNum.toString());
也是 N
。所以时间复杂度是N+N+N^2+N+N,简化为O(N^2)
时间复杂度,也称为二次时间复杂度。
现在让我们看看空间复杂度:
int array[] = new int[Integer.toString(number).length()];
在本例中为 N
和
for (int k : array) {
strNum.append(k);
}
也是N
,所以空间复杂度是2N
,简化为O(N)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。