求助,紧急通话怎么设置 ,打开优酷网站显示"rgv587_flag": "sm", "url": "//www.youku.c

1.将一个含有n个元素的数组向右循環移动k位要求时间复杂度是O(n),且只能使用两个额外的变量

右移K位的过程就是按后K位和剩余位分成两部分,分别逆序排列然后把整个數组逆序排列。

变换过程通过以下步骤完成:

方法1:将单链表储存为数组然后按照数组的索引逆序进行反转。

方法2:使用三个指针遍历單链表逐个链接点进行反转。

方法3:从第2个节点到第N个节点依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾

方法1的问题是浪费空间。方法2和方法3效率相当一般方法2较为常用。

从头指针开始每次分别移动2、1个节点

每遍历到一个新节点,就用噺节点和HashSet集合当中存储的节点作比较如果发现HashSet当中存在相同节点ID,则说明链表有环如果HashSet当中不存在相同的节点ID,就把这个新节点ID存入HashSet

快慢指针法 若无环,快指针先为空

6.单向链表中查找倒数第K个数 两次遍历 ——> 一次遍历

p1和p2分别都是head指针先将p2向右移动k次。(此时k为2)

只需要继续保持p1和p2等间距的右移当p2的next为null,则证明p1所指的结点的值为倒数第k个节点的值

7.查找单链表的中间节点

建立两个指针一个指针一次遍历两个节点,另一个节点一次遍历一个节点当快指针遍历到空节点时,慢指针指向的位置为链表的中间位置

对于两个没有环的链表楿交于一节点,则在这个节点之后的所有结点都是两个链表所共有的如果它们相交,则最后一个结点一定是共有的则只需要判断最后┅个结点是否相同即可。时间复杂度为O(len1+len2)

对于相交的第一个结点,则可求出两个链表的长度然后用长的减去短的得到一个差值 K,然后让長的链表先遍历K个结点

还可以这样:其中一个链表首尾相连,检测另外一个链表是否存在环如果存在,则两个链表相交而检测出来嘚依赖环入口即为相交的第一个

(1)next[0]= -1,任何串的第一个字符的模式值规定为-1

(2)next[j] = -1模式串t中下标为j的字符,如果与首字符相同k个字符不等或者楿等但t[j]

(3)next[j] = k,模式串t中下标为j的字符如果k个字符相等,且t[j]

设在字符串S中查找模式串T若S[m]!=T[n],那么取T[n]的模式函数值next[n]

k<n,表示S[m]的前k个字符与T中嘚开始k个字符已经间接比较相等了,下一次比较S[m]T[k]相等吗

10.两个栈实现一个队列

入队时,直接压入stack1中

出队时判断stack2是否为空,如果stack2为空则将stack1中的元素倒入stack2中,否则直接弹出stack2中的元素

11.两个队列实现一个栈

入栈时直接压入queue1中

出栈时,先将queue1中的元素除最后一个元素外依次出隊列并压入队列queue2中,将留在queue1中的最后一个元素出队列即为出栈元素最后还要把queue2中的元素再次压入queue1中

12.二叉树的树高与树宽

13.根节点到指定節点的路径

14.两个节点的公共结点

如果结点中有一个指向父结点的指针,我们可以把问题转化为求两个链表的共同结点

}

我要回帖

更多关于 紧急通话怎么设置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信