美文网首页
IOS 算法(基础篇) ----- 算术三元组的数目

IOS 算法(基础篇) ----- 算术三元组的数目

作者: ShawnAlex | 来源:发表于2022-08-09 16:48 被阅读0次

    给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件,则三元组 (i, j, k) 就是一个 算术三元组 :
    i < j < k ,
    nums[j] - nums[i] == diff 且
    nums[k] - nums[j] == diff
    返回不同 算术三元组 的数目。
    其中:
    3 <= nums.length <= 200
    0 <= nums[i] <= 200
    1 <= diff <= 50
    nums 严格 递增

    例子

    输入: nums = [0,1,4,6,7,10], diff = 3
    输出: 2
    解释:
    (1, 2, 4) 是算术三元组:7 - 4 == 3 且 4 - 1 == 3 。
    (2, 4, 5) 是算术三元组:10 - 7 == 3 且 7 - 4 == 3 。
    示例 2:

    输入: nums = [4,5,6,7,8,9], diff = 2
    输出: 2
    解释:
    (0, 2, 4) 是算术三元组:8 - 6 == 2 且 6 - 4 == 2 。
    (1, 3, 5) 是算术三元组:9 - 7 == 2 且 7 - 5 == 2 。

    解题思路

    方法1. 遍历法

    一次循环, 判断nums中是否含有 当前值, 当前值 + diff, 当前值 + diff * 2 即可

    未翻译版
        func arithmeticTriplets(_ nums: [Int], _ diff: Int) -> Int {
    
            var res = 0
            for i in 0..<nums.count - 2 {
                if nums.contains(nums[i] + diff) && nums.contains(nums[i] + diff * 2) {
                    res += 1
                }
            }
            return res
    
        }
    
    翻译版
        func arithmeticTriplets(_ nums: [Int], _ diff: Int) -> Int {
    
            // 定义出现次数变量
            var res = 0
    
            // 遍历, 到 nums.count - 2 才行
            for i in 0..<nums.count - 2 {
    
                // 判断nums如果包含nums[i] + diff 和 nums[i] + diff * 2
                if nums.contains(nums[i] + diff) && nums.contains(nums[i] + diff * 2) {
    
                    // 次数 + 1
                    res += 1
                }
            }
    
            // 返回结果
            return res
    
        }
    

    方法2. 哈希法

    哈希表法, 以nums中 出现数字做Key, 1为value, 形成 哈希表
    一次遍历nums, 判断nums[i] - diff, nums[i] - diff * 2 即可

    未翻译版
        func arithmeticTriplets(_ nums: [Int], _ diff: Int) -> Int {
    
            var res = 0, temp = [nums[0] : 1, nums[1] : 1]
            for i in 2..<nums.count {
                if temp[nums[i] - diff] != nil && temp[nums[i] - diff * 2] != nil {   
                    res += 1
                }
                temp[nums[i]] = 1
            }
            return res
    
        }
    
    翻译版
        func arithmeticTriplets(_ nums: [Int], _ diff: Int) -> Int {
    
            // 定义出现次数变量, 定义哈希表temp 添加nums前2个元素, 
            // temp初始为 [nums[0] : 1, nums[1] : 1]
            var res = 0, temp = [nums[0] : 1, nums[1] : 1]
           
            // 遍历, 因为前2个元素已经加入
            for i in 2..<nums.count {
    
                // 如果哈希表存在 nums[i] - diff, nums[i] - diff * 2
                if temp[nums[i] - diff] != nil && temp[nums[i] - diff * 2] != nil { 
    
                    // 结果 + 1  
                    res += 1
                }
    
                // 新增键值对, 当前数字做`Key`, 1为`value`
                temp[nums[i]] = 1
            }
    
            // 返回结果
            return res
    
        }
    

    题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
    IOS 算法合集地址

    相关文章

      网友评论

          本文标题:IOS 算法(基础篇) ----- 算术三元组的数目

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