使用指针操作:通过使用指针来访问数组元素,可以减少额外的内存开销和复制操作。同时,指针操作更加高效,可以提高程序的执行效率。 采用适当的算法:选择合适的算法可以提高reverse函数的效率。例如,可以使用双指针法来进行数组元素的交换操作,这种方法的时间复杂度为O(n),效率较高。 避免不必要的循环和操作:在编写reverse函...
但是此法的时间复杂度是O(N),空间复杂度也是O(N),不符合题意,再换: 法三:三趟逆置 思想: 第一趟对它的前N-K个元素逆置,第二趟对它的后K个元素逆置,最后整体逆置。如图所示: 此法非常巧妙,时间复杂度O(N),空间复杂度O(N),符合题意 代码如下: voidreverse(int*nums,intleft,intright){while(left<...
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器...
intmain(){intnum =123;intreversed = reverse(num); printf("Input: %d\n", num);printf("Reversed: %d\n", reversed); return0;} 算法解析 该算法的时间复杂度为 O(log(x)),其中 x 是给定整数的位数。在循环中,我们每次都将给定整数除以10,因此循环的次...
structListNode*ReverseList(structListNode*pHead) { structListNode*pre=NULL;//pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向null structListNode*cur=pHead;//cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head ...
("\n");}structListNode*reverseBetween(structListNode*head,intm,intn){structListNode*pre=NULL;structListNode*cur=head;structListNode*next=NULL;structListNode*left=NULL;inti;if(head){next=cur->next;}if(m==1){left=cur;for(i=0;i<n;i++){next=cur->next;cur->next=pre;pre=cur;cur=next...
2.右移:把第1到第n-p个看成集合A,把第n-p+1到第n个看成集合B,则需要推导AB->BA, 过程(A-1)*(B-1)-> ( (A-1)*(B-1))-1= BA 时间复杂度:O(n) , 空间复杂度O(1) 代码: #include <stdio.h>//在arr数组的n到m的位置数据进行倒置voidreverse(int* arr,intn,intm) {if(n >=m)...
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤n≤1000 要求:空间复杂度O(1)O(1) ,时间复杂度O(n)O(n) 。 如当输入链表{1,2,3}时, 经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
翻转法的时间复杂度为O(N),空间复杂度为O(1)。我们可以通过以下三个步骤实现: 1.翻转前半部分。 2.翻转后半部分。 3.翻转整体。 步骤1和2: 步骤3: 代码部分: voidreverse(int*nums,intbegin,intend){while(begin<end){inttmp=nums[begin];nums[begin]=nums[end];nums[end]=tmp;++begin;--end;}}...
1.2 算法的复杂度 对于算法的“好坏”,我们一般用复杂度来衡量: 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外...