首页 > 其他分享 >【枚举右,维护左】LeetCode 3404. 统计特殊子序列的数目

【枚举右,维护左】LeetCode 3404. 统计特殊子序列的数目

时间:2025-01-01 11:19:03浏览次数:1  
标签:map frac nums int long 枚举 3404 LeetCode

题目

前置题目:https://leetcode.cn/problems/number-of-good-pairs/description/
当前题目:https://leetcode.cn/problems/count-special-subsequences/description/

题解

将 \(nums[p] * nums[r] = nums[r] * nums[s]\) 变形为 \(\frac{nums[p]}{nums[q]} = \frac{nums[s]}{nums[r]}\)。

枚举 \(r\),在每次 \(r\) 右移一位的时候,仅需要用 map 维护 \(q = r - 2\) 情况下的 \(\frac{nums[p]}{nums[q]}\) 值,这步操作的总体时间复杂度是 \(O(n^2)\);并在移动之后枚举 \(\frac{nums[s]}{nums[r]}\) 在 map 中出现的次数,这步操作的时间复杂度是 \(O(n^2logn)\)。

参考代码

class Solution {
public:
    long long numberOfSubsequences(vector<int>& nums) {
        long long ans = 0LL;
        int n = nums.size();
        map<double, int> mp;
        for (int i = 4; i < n; ++ i) {
            for (int j = i - 4; j >= 0; -- j) {
                mp[1.0 * nums[j] / nums[i - 2]] ++;
            }
            for (int j = i + 2; j < n; ++ j) {
                ans += mp[1.0 * nums[j] / nums[i]];
            }
        }
        return ans;
    }
};

标签:map,frac,nums,int,long,枚举,3404,LeetCode
From: https://www.cnblogs.com/RomanLin/p/18644034

相关文章

  • 24年收尾之作------动态规划<六> 子序列问题(含对应LeetcodeOJ题)
    目录引例 经典LeetCodeOJ题1.第一题 2.第二题3.第三题  4.第四题5.第五题 6.第六题 7.第七题引例OJ传送门LeetCode<300>最长递增子序列画图分析:使用动态规划解决1.状态表示dp[i]表示以i位置元素为结尾的子序列中,最长递增子序列的长度2.状态表示 ......
  • Leetcode刷题第二天-二分查找
    33.搜索旋转排序数组-力扣(LeetCode)二分查找的前提条件“数组有序”middle将数组分成左区间[left,middle)和右区间[middle,rigjht)两部分,左区间和右区间必有一个区间为有序区间左区间为有序数组如果middle数据大于target ——> 目标数据在左区间且左区间升序——>正......
  • LeetCode算法题 (比较含退格的字符串)Day9!!!C/C++
    https://leetcode.cn/problems/backspace-string-compare/description/一、题目描述给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。二、相关知识点了解   ......
  • 吃透LeetCode 159:至多包含两个不同字符的最长子串
    开篇:刷题党必看!在算法学习的江湖里,LeetCode可是众多程序员的“练武场”,其重要性不言而喻。从初出茅庐的新手,到经验丰富的技术大拿,大家都热衷于在这个平台上切磋算法技艺,提升编程功力。这里汇聚了各种巧妙构思的算法题,堪称是检验我们编程能力的“试金石”。而掌握经典题目的解......
  • 算法训练营Day28 | leetcode 122.买卖股票的最佳时机II 55.跳跃游戏 45.跳跃游戏II
    122.买卖股票的最佳时机II本题首先要清楚两点:只有一只股票!当前只有买股票或者卖股票的操作想获得利润至少要两天为一个交易单元。贪心算法这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入…循环反复。如果想到其实最终利润是可以分解的,那么本题就......
  • leetcode 1191. K 次串联后最大子数组之和 未解决
    1191.K次串联后最大子数组之和很蠢但能通过的方法:k>=3时,算三次res。如果res2- res2==res3-res2,说明为等差数列。如果res2- res2!=res3-res2,说明循环多次的结果都是一样的。classSolution{public:intkConcatenationMaxSum(vector<int>&arr,intk)......
  • 【Leetcode_Hot100】链表
    链表160.相交链表206.反转链表234.回文链表141.环形链表142.环形链表II21.合并两个有序链表2.两数相加19.删除链表的倒数第N个结点25.K个一组翻转链表138.随机链表的复制148.排序链表23.合并K个升序链表146.LRU缓存160.相交链表方法一:模拟依......
  • leetcode137. 只出现一次的数字 II
    题目:        给你一个整数数组 nums,除某个元素仅出现一次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。示例1:输入:nums=[2,2,3,2]输出:3示例2:输入:nums=[......
  • leetcode 1749. 任意子数组和的绝对值的最大值
    1749.任意子数组和的绝对值的最大值没做出来......
  • leetcode 2606. 找到最大开销的子字符串
    2606.找到最大开销的子字符串classSolution{public:intmaximumCostSubstring(strings,stringchars,vector<int>&vals){intsize=s.size();vector<int>dp(size);autofound=chars.find(s[0]);if(found==s......