答案 0 :(得分:2)
for (i=0;i<strlen(s);i++)
此代码正在调用strlen(s)
函数。它需要O(n)
时间复杂度。
for (i=0;s[i]!='\0';i++)
此代码不调用任何函数,因此比前一代快得多。
首先,在i的每次迭代中检查s
的长度,O(n)
找到最后的0,所以需要O(n^2)
,第二种情况是{{1} }。
此处,O(n)
非常大,可供计算。
答案 1 :(得分:1)
strlen()
根据操作系统的不同,这对于堆栈来说可能太大了。您应该使用NUL
或在文件范围内动态分配。即使堆栈足够大,在堆栈上放置如此大的数组也不是好习惯。
除此之外:对每个循环迭代计算strlen
,在字符串中搜索s
终止符。对于最坏情况(最大长度),size_t slen = strlen(s);
for ( i = 0 ; i < slen ; i++ ) {
处理1000000次,搜索Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
(O(n ** 2))的所有1000001个位置。
您应该将它分配给循环外的变量并使用它来比较:
jQuery(document).ready(function ($) {
$('#checkbox').change(function(){
setInterval(function () {
moveRight();
}, 3000);
});
var slideCount = $('#slider ul li').length;
var slideWidth = $('#slider ul li').width();
var slideHeight = $('#slider ul li').height();
var sliderUlWidth = slideCount * slideWidth;
$('#slider').css({ width: slideWidth, height: slideHeight });
$('#slider ul').css({ width: sliderUlWidth, marginLeft: - slideWidth });
$('#slider ul li:last-child').prependTo('#slider ul');
function moveLeft() {
$('#slider ul').animate({
left: + slideWidth
}, 200, function () {
$('#slider ul li:last-child').prependTo('#slider ul');
$('#slider ul').css('left', '');
});
};
function moveRight() {
$('#slider ul').animate({
left: - slideWidth
}, 200, function () {
$('#slider ul li:first-child').appendTo('#slider ul');
$('#slider ul').css('left', '');
});
};
$('a.control_prev').click(function () {
moveLeft();
});
$('a.control_next').click(function () {
moveRight();
});
});
或坚持第一个版本,也没关系。