美文网首页
Week 22 0814--0820

Week 22 0814--0820

作者: vincehxb | 来源:发表于2017-08-23 23:01 被阅读0次

    question 1:寻找3个数的最大乘积

    给定一个列表,找出3个数使得他们的积最大

    答案:

    积最大的情况:

    (1)有两个最小的负数了一个最大的正数组成

    (2)由3个最大的正数组成

    方法1:

    时间复杂度:O(n*logn)因为排序算法而消耗的时间

    方法二:

    实际上我们并不需要对整个列表排序,只需要找到最大的3个数和最小的两个数就可以

    时间复杂度:O(n)

    question2 :寻找3个点,使得3个点之间两两距离相等(点之间有次序)

    答案:

    因为点的次序是有要求的,所以对于每个点都要循环计算所有点的距离,所以时间复杂度一定时O(n^2)

    对于一个点,循环n次计算出所有点距离这个点的距离,建立一个hash表(字典,以距离为key),所以假设距离1中有3个点,那么可能的组合为A(3,2),因为对于n个点都要计算一次,所以目标点的位置就假设在第一位(也就是说3个点中只有2个点的位置是可以选择的)

    那么假如同一个距离d有n个点,那么可以的选择有 n*(n-1)个(n>=1)

    question 3:翻转链表的指定位置 

    给定链表和指定的节点序号,翻转指定的节点

    我的答案:

    这道题的难点在于要想到头结点是会变化的。假如m=1,也就是说head也被翻转了,那么这时候返回head值肯定是错误的(因为这时候head不是头结点了)

    解决方法是创造一个第0节点,这个节点的next指针指向翻转后的头指针。

    这样当m=1的时候,pre也就是第0节点(也是m-1节点)的next指向[m,n]段链表的头节点,因为m=1,也就是指向了新的整个链表的头节点

    当m>1的时候,dummynode.next指向整个列表的头结点后就没有再改变。

    所以返回dummynode.next能够保证一定返回链表的头,返回head就不一定能够返回链表的头

    相关文章

      网友评论

          本文标题:Week 22 0814--0820

          本文链接:https://www.haomeiwen.com/subject/qmqnrxtx.html