c - 在 C 中超出时间限制
问题描述
我编写了在链表中插入元素的代码,它工作正常。然后我编写了在给定大小的组中反转链表的代码。我的问题是我的代码执行时间过长,因为我想优化它代码。
例如:
输入
8 //number of elements
1 2 2 4 5 6 7 8 //elements
4 //position to reverse the list elements
输出
4 2 2 1 8 7 6 5
struct node *reverse (struct node *head, int k)
{
int count=0,i=0,j=0,a[1000],start=0,end;
struct node *temp=head;
struct node *t=head;
struct node *tt=head;
while(temp!=NULL)
{
temp=temp->next;
count++;
}
while(count!=0)
{
while((k--)&&(t!=NULL))
{
a[i++]=t->data;
t=t->next;
}
end=i-1;
while(start<end)
{
int temp=a[start];
a[start]=a[end];
a[end]=temp;
start++;
end--;
}
while(tt->next!=t)
{
tt->data=a[j];
j++;
tt=tt->next;
}
tt->data=a[j];
count=count-k;
i=0;
j=0;
}
return head;
}
解决方案
所需的代码实际上是 6!行长
这里有我的例子
#include <stdio.h>
void reverse(int *first, int *last)
{
int tmp;
while(first < last)
{
tmp = *first;
*first++ = *last;
*last-- = tmp;
}
}
void reverseFromPos(int *arr, size_t len, size_t pos)
{
reverse(&arr[0], &arr[pos - 1]);
reverse(&arr[pos], &arr[len -1]);
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8, 9};
size_t len;
reverseFromPos(arr, len =sizeof(arr) / sizeof(arr[0]), 4);
for(size_t index = 0; index < len; index++)
printf("%d ", arr[index]);
printf("\n");
return 0;
}
推荐阅读
- java - 流中的 if 语句
- grails - grails Publisher/Subscriber 从域类到服务
- java - 在关闭 Windows 和打开其他 Windows 时遇到问题
- r - R - 通过 2 个字符串将多行分隔文本的每个实例提取并解析为单独的行(.txt 到 data.frame)
- linux - 防止性能名称破坏
- swagger - .NET Core Web API with Swagger:在同一个调用中同时发布文件和数据
- c++ - Q_PROPERTY 与私有二传手
- c - 与 Heisenbug 相反,仅在调试时出现分段错误,但程序运行正常
- javascript - 如果javascript中有超过2个,则拆分数据
- angular - Angular 8 / Typescript在调用数据时设置接口的属性