[java面试随录]编程题

一个数组,将其中三个数字相加为0的所有组合输出;

方案一:暴力穷举,o(n^3)的复杂度,最差的回答....

方案二:先排序,然后遍历数组,执行以下内容:

循环到第i个元素,第一个数字为a[i],第二个数字为a[i+1],第三个数字为a[a.length-1];

测试它们三个数字,若大于0,则第三个数字向前移动1,若小于0,则第二个数字向后移动1,若相等,则将三个数字的索引以一定的形式放入集合,然后循环下一个i;

时间复杂度:o(n^2);

 

给定两个链表的头节点,返回它们相交的结点;

方案一:暴力穷举:定一个链表,依次排查它的结点在另一个链表中是否存在;时间复杂度o(mn);最糟糕的方案;

方案二:将两个链表依次找到尾结点,同时记录它们的长度,如果尾结点相同,则说明相交,如果尾结点不同,则说明不相交,直接返回null;

相交的情况:将较长的链表向后移动k个结点,k为两个链表的长度差,然后同时向后移动两个链表的指针,当获得相同结点时,该节点就是相交点,返回即可;

posted @ 2019-08-23 20:52  随风EK  阅读(117)  评论(0)    收藏  举报