zoukankan      html  css  js  c++  java
  • 【leetcode】1577. Number of Ways Where Square of Number Is Equal to Product of Two Numbers

    题目如下:

    Given two arrays of integers nums1 and nums2, return the number of triplets formed (type 1 and type 2) under the following rules:

    • Type 1: Triplet (i, j, k) if nums1[i]2 == nums2[j] * nums2[k] where 0 <= i < nums1.length and 0 <= j < k < nums2.length.
    • Type 2: Triplet (i, j, k) if nums2[i]2 == nums1[j] * nums1[k] where 0 <= i < nums2.length and 0 <= j < k < nums1.length

    Example 1:

    Input: nums1 = [7,4], nums2 = [5,2,8,9]
    Output: 1
    Explanation: Type 1: (1,1,2), nums1[1]^2 = nums2[1] * nums2[2]. (4^2 = 2 * 8). 
    

    Example 2:

    Input: nums1 = [1,1], nums2 = [1,1,1]
    Output: 9
    Explanation: All Triplets are valid, because 1^2 = 1 * 1.
    Type 1: (0,0,1), (0,0,2), (0,1,2), (1,0,1), (1,0,2), (1,1,2).  nums1[i]^2 = nums2[j] * nums2[k].
    Type 2: (0,0,1), (1,0,1), (2,0,1). nums2[i]^2 = nums1[j] * nums1[k].
    

    Example 3:

    Input: nums1 = [7,7,8,3], nums2 = [1,2,9,7]
    Output: 2
    Explanation: There are 2 valid triplets.
    Type 1: (3,0,2).  nums1[3]^2 = nums2[0] * nums2[2].
    Type 2: (3,0,1).  nums2[3]^2 = nums1[0] * nums1[1].
    

    Example 4:

    Input: nums1 = [4,7,9,11,23], nums2 = [3,5,1024,12,18]
    Output: 0
    Explanation: There are no valid triplets.

    Constraints:

    • 1 <= nums1.length, nums2.length <= 1000
    • 1 <= nums1[i], nums2[i] <= 10^5

    解题思路:题目很简单,先分别把nums1和nums2中任意两个下标不一致的元素的乘积算出来,统计出每个元素出现的次数,然后再计算对应的数组中这个元素作为平方值出现的次数即可。

    代码如下:

    class Solution(object):
        def numTriplets(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: int
            """
            res = 0
            dic_num1 = {}
            dic_num2 = {}
    
            for i in range(len(nums1)):
                for j in range(i+1,len(nums1)):
                    v = nums1[i] * nums1[j]
                    dic_num1[v] = dic_num1.setdefault(v,0) + 1
    
            for i in range(len(nums2)):
                for j in range(i+1,len(nums2)):
                    v = nums2[i] * nums2[j]
                    dic_num2[v] = dic_num2.setdefault(v,0) + 1
    
            for i in nums1:
                res += dic_num2.get(i * i,0)
            for i in nums2:
                res += dic_num1.get(i * i, 0)
    
            return res
  • 相关阅读:
    http缓存机制与原理
    BFC与浮动
    05ICMP协议与ARP协议(IP协议中重要协议)
    04IP编址(网络层)
    03以太网帧结构(链路层 IEEE802.3)
    02传输介质简介
    shell 脚本 2
    shell 脚本 1
    shell 中时间 表达
    sed 行编辑器
  • 原文地址:https://www.cnblogs.com/seyjs/p/13999937.html
Copyright © 2011-2022 走看看