Day4 直线上最多的点数 循环链表 四数相加2

Posted 未来可期-2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day4 直线上最多的点数 循环链表 四数相加2相关的知识,希望对你有一定的参考价值。

四数相加2
对下一个题的方式有启发,使用dict存储后两个之和

class Solution(object):
    def fourSumCount(self, A, B, C, D):
        Dict=
        for i in range(len(C)):
            for j in range(len(D)):
                if C[i]+D[j] in Dict:
                    Dict[C[i]+D[j]]+=1
                else:
                    Dict[C[i]+D[j]]=1
        global ans
        ans=0
        for i in range(len(A)):
            for j in range(len(B)):
                target=0-A[i]-B[j]
                if target in Dict:
                    ans+=Dict[target]
        return ans

直线上最多的点数
按照斜率区分不同的直线,注意需设一变量cnt记录在同一点的点的数量,以及斜率的精度问题

class Solution(object):
    def maxPoints(self, points):
        if not points:
            return 0
        elif len(points)==1:
            return 1
        Map=
        for i in range(len(points)):
            Map[i]=
            cnt=0
            for j in range(len(points)):
                if points[i][0]==points[j][0]:
                    # 在同一点
                    if points[i][1]==points[j][1]:
                        cnt+=1
                    # 在同一条垂直线上
                    else:
                        Map[i][1<<32+1]=Map[i].get(1<<32+1, 0)+1
                else:
                    k=7.0*(points[i][1]-points[j][1])/(points[i][0]-points[j][0])
                    Map[i][k]=Map[i].get(k,0)+1
            if len(Map[i])==0:
                Map[i][0.]=cnt
            else:
                for _ in Map[i].keys():
                    Map[i][_]+=cnt
        Max=0
        for k,v in Map.items():
            Max=max(Max, max(v.values()))
        return Max

循环链表
判断链表是否有环
l1每次走一格,l2每次走两格,如果链表中有环,则类似追击相遇问题,l2早晚会追到l1; 否则l2提前到末尾

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def hasCycle(self, head):
        l1=head
        l2=head
        while l2 and l2.next:
            l1=l1.next
            l2=l2.next.next
            if l1==l2:
                return True
        return False

以上是关于Day4 直线上最多的点数 循环链表 四数相加2的主要内容,如果未能解决你的问题,请参考以下文章

题目地址(149. 直线上最多的点数)

题目地址(149. 直线上最多的点数)

《LeetCode之每日一题》:69.直线上最多的点数

leetcode 149. 直线上最多的点数

LeetCode 0149. 直线上最多的点数

LeetCode 149 直线上最多的点数[数学 几何 哈希表] HERODING的LeetCode之路