博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔试算法题(18):常数时间删除节点 & 找到仅出现一次的两个数字
阅读量:7024 次
发布时间:2019-06-28

本文共 1634 字,大约阅读时间需要 5 分钟。

出题:给定链表的头指针和一个节点指针,要求在O(1)的时间复杂度下删除该节点

分析:

  • 如果需要删除的节点为A,其前序节点为A-,其后续节点为A+,所以删除A之后,需要使得A-的下一个节点就是A+,常规做法是设法得到A-的索引,需要 从链表头开始遍历所以时间复杂度为O(N),但实际情况是只要保证A-的下一个节点是A+就行;
  • 所以可将A+节点的内容直接复制到A节点,这时时间复杂度 为O(1),对于最后一个节点而言需要使用O(N)的时间复杂度,所以平均复杂度为(O(1)*(n-1) + O(n))/n,所以平均复杂度为O(1);

解题:

1 struct Node { 2         int v; 3         Node *next; 4 }; 5  6 void deleteNode(Node *head, Node *target) { 7         if(target == NULL) return; 8         if(target->next != NULL) { 9                 Node *temp=target->next;10                 target->v=temp->v;11                 target->next=temp->next;12                 delete temp;13         } else {14                 Node *temp=head;15                 while(temp!=NULL) {16                         if(temp->next != target)17                                 temp=temp->next;18                         else {19                                 temp->next=temp->next->next;20                                 delete target;21                                 break;22                         }23                 }24         }25 }

 

出题:给定一个整型数组,除了两个数字只出现一次外其他数字都出现了两次,要求确定这个两个只出现一次的数字,时间复杂度为O(N),空间复杂度为O(1);

分析:

  • 由于任何一个数字异或它本身的结果都为0,所以从左到右依次异或整型数组,数组中出现两次的数字的异或结果为0,则最终的结果就是出现一次的两个数字的异 或结果;由于这两个数字肯定不同,所以结果肯定非0,为了将这两个数字分别放到一个子数组中,选取结果中第一个出现的1(第k位),这样根据第k位是否为 1将数组元素分成两个子数组,他们分别包含了一个只出现一次的数字,然后针对每一个子数组重新进行异或运算,最终就可分别得到这两个仅出现一次的数字;
  • 本题参考何海涛老师的解法,海涛老师威武!!非常感谢何海涛老师的无私奉献,其博客地址为:

解题:

1 void findInteger(int *array, int length) { 2         /** 3          * 获取整个数组的异或结果 4          * sum1为两个目标数字的异或结果 5          * */ 6         int sum1=array[0]; 7         for(int i=1;i

 

转载于:https://www.cnblogs.com/leo-chen-2014/p/3740580.html

你可能感兴趣的文章
ACdreamoj 1011(树状数组维护字符串hash前缀和)
查看>>
RPC与REST的差别
查看>>
亚马逊云EC2做PPTP SERVER的笔记
查看>>
MySQL SELECT 语句
查看>>
飘逸的python - 不使用keyword,求和1+2+…+n
查看>>
MFC文档(SDI)应用:画图程序(画圆、画线、鼠标事件)
查看>>
20140808,微软八月安全补丁提前通知
查看>>
LEETCODE
查看>>
Mac下使用Eclipse的Show in Terminal提示command not found: mvn
查看>>
机器学习概念之特征选择(Feature selection)之RFormula算法介绍
查看>>
逾期率的水有多深,你知道吗?
查看>>
服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)
查看>>
goto语句的升级版,setjmp,longjmp
查看>>
CentOS7使用firewalld打开关闭防火墙与端口[转]
查看>>
Eclipse-Java代码规范和质量检查插件-Checkstyle
查看>>
c语言中各种数据类型的长度
查看>>
TEST mathjax
查看>>
修改web项目的启动页
查看>>
居中显示
查看>>
Java的不定参数(eg:Object...)(转)
查看>>