一个要求时间复杂度O(N),空间O(1)的排序问题

发布于 2022-08-23 23:13:13 字数 165 浏览 15 评论 0

一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的 相对顺序 比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时间复杂度O(N),空间O(1) 。(此题一直没看到令我满意的答案,一般达不到题目所要求的:时间复杂度O(N),空间O(1))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

两相知 2022-08-30 23:13:13

找到答案了,来完善一下。
引入两个指针即可,思路如下:

input[] = {1,7,-5,9,-12,15};
pts=&input[i]; pti=&input[i];
n=1;
for(i=0;i<sizeof(input)-2;i++) {
   pts++;
   if (*(pts-1)<0) {
      (pts-2)->next = pts;
      (pts-1)->next = pti;
   }

   if(n && 0>*pti)
      pti++;
   else
      n=0;
}
if (0>input[sizeof(input)-1])
   input[sizeof(input)-1]->next=pti;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文