• 1726. Tuple with Same Product


    package LeetCode_1726
    
    /**
     * 1726. Tuple with Same Product
     * https://leetcode.com/problems/tuple-with-same-product/
     * Given an array nums of distinct positive integers,
     * return the number of tuples (a, b, c, d) such that a * b = c * d where a, b, c, and d are elements of nums, and a != b != c != d.
    Example 1:
    Input: nums = [2,3,4,6]
    Output: 8
    Explanation: There are 8 valid tuples:
    (2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)
    (3,4,2,6) , (4,3,2,6) , (3,4,6,2) , (4,3,6,2)
    
    Example 2:
    Input: nums = [1,2,4,5,10]
    Output: 16
    Explanation: There are 16 valids tuples:
    (1,10,2,5) , (1,10,5,2) , (10,1,2,5) , (10,1,5,2)
    (2,5,1,10) , (2,5,10,1) , (5,2,1,10) , (5,2,10,1)
    (2,10,4,5) , (2,10,5,4) , (10,2,4,5) , (10,2,4,5)
    (4,5,2,10) , (4,5,10,2) , (5,4,2,10) , (5,4,10,2)
    
    Example 3:
    Input: nums = [2,3,4,6,8,12]
    Output: 40
    
    Example 4:
    Input: nums = [2,3,5,7]
    Output: 0
    
    Constraints:
    1. 1 <= nums.length <= 1000
    2. 1 <= nums[i] <= 10^4
    3. All elements in nums are distinct.
     * */
    class Solution {
        /*
        * solution: HashMap, accumulate the number of that every two number have a same product,
        * Time:O(n^2), Space:O(n)
        * */
        fun tupleSameProduct(nums: IntArray): Int {
            val map = HashMap<Int, Int>()
            var count = 0
            for (i in nums.indices) {
                for (j in i + 1 until nums.size) {
                    val product = nums[i] * nums[j]
                    val countOfProduct = map.getOrDefault(product, 0)
                    //accumulate the count if have same product, for example [1,10,2,5]: 1*10 and 2*5
                    count += countOfProduct
                    map.put(product, countOfProduct + 1)
                }
            }
            //each tuple [a,b,c,d] can be arranged in 8 different ways ot matching
            return 8 * count
        }
    }
  • 相关阅读:
    前端开发——HTML学习笔记
    前端开发——HTML学习笔记
    前端开发——HTML学习笔记
    日记2018/1/4
    物联网概念
    安卓常见英文缩写的全拼
    快速排序和计数排序API
    Hash表API
    栈/队列API(push和pop)
    链表API实现(插入,删除,查找)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/14292106.html
Copyright © 2020-2023  润新知