[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为两个链表的长度差,然后同时向后移动两个链表的指针,当获得相同结点时,该节点就是相交点,返回即可;
学习java的新手,尝试将学到的内容总结为博客,内容如有错误,欢迎指正,感激不尽。