【每日一题Day236】LC2475数组中不等三元组的数目

news/2024/10/21 10:00:58/

数组中不等三元组的数目【LC2475】

给你一个下标从 0 开始的正整数数组 nums 。请你找出并统计满足下述条件的三元组 (i, j, k) 的数目:

  • 0 <= i < j < k < nums.length
  • nums[i]、nums[j] 和nums[k]两两不同 。
    • 换句话说:nums[i] != nums[j]nums[i] != nums[k]nums[j] != nums[k]

返回满足上述条件三元组的数目*。*

暴力

  • 思路:使用三个指针暴力搜寻合法的位置

  • 实现

    class Solution {public int unequalTriplets(int[] nums) {int len = nums.length;int res = 0;if (len < 3){return res;}int i = 0;while (i < len - 2){int j = i + 1;while (j < len - 1){if (nums[i] != nums[j]){int k = j + 1;while (k < len){if (nums[j] != nums[k] && nums[i] != nums[k]){res++;                            }k++;}}j++;}i++;}return res;}
    }
    
    • 复杂度

      • 时间复杂度: O ( n 3 ) O(n^3) O(n3)
      • 空间复杂度: O ( 1 ) O(1) O(1)

排序

  • 思路:对于数组中某一个元素 x x x,假设

    • 大于其的元素有a个
    • 等于其的元素有b个
    • 小于其的元素有c个

    那么,根据组合原理,该元素对结果的贡献为 a ∗ b ∗ c a*b*c abc

  • 实现

    class Solution {public int unequalTriplets(int[] nums) {Arrays.sort(nums);int l = 0;int ans = 0;int len = nums.length;while (l < len ){int r = l + 1;// 寻找与nums[l]不相等的第一个数while (r < len && nums[l] == nums[r]){r++;}ans += l  * (r - l) * ( len - r);l = r;            }return ans;}
    }
    
  • 复杂度

    • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
    • 空间复杂度: O ( l o g n ) O(logn) O(logn)

哈希表

  • 思路:由于三元组中元素的数值的顺序是不重要的,只需要值不相等既可,因此可以直接用哈希表统计num出现的次数,然后遍历哈希表,假设

    • 在其之前遍历的元素有a个
    • 等于其的元素有b个
    • 在其之后遍历的元素有c个

    那么,根据组合原理,该元素对结果的贡献为 a ∗ b ∗ c a*b*c abc

  • 实现

    class Solution {public int unequalTriplets(int[] nums) {Map<Integer,Integer> map = new HashMap<>();int ans = 0;int len = nums.length;for (int i = 0; i < len; i++){map.put(nums[i], map.getOrDefault(nums[i],0) + 1);}int l = 0;int r = len;for (Map.Entry<Integer,Integer> node : map.entrySet()){int count = node.getValue();r -= count;ans += l * count * r;l += count;}return ans;}
    }
    
  • 复杂度

    • 时间复杂度: O ( n ) O(n) O(n)
    • 空间复杂度: O ( n ) O(n) O(n)

http://www.ppmy.cn/news/361910.html

相关文章

2023 可信数据库发展大会:近百位行业大咖将出席演讲

当前&#xff0c;全球数字经济加速发展&#xff0c;以信息技术和数据作为关键要素的数字经济成为全球新一轮科技革命和产业变革的重要引擎&#xff0c;作为数字经济的数据底座和基础软件的重要一员&#xff0c;数据库产业正经历前所未有之大变局。伴随政策规划有力指导、技术不…

真刑!几行代码端了整个教务系统。。

今天给大家伙分享一个网络安全的案例&#xff0c;程序员和网安同学都可以看看&#xff0c; 前言&#xff1a;本文中涉及到的相关漏洞已报送厂商并得到修复&#xff0c;本文仅限技术研究与讨论&#xff0c;严禁用于非法用途&#xff0c;否则产生的一切后果自行承担 漏洞成因 事…

【920信号与系统笔记】第三章 连续信号的正交分解

连续信号的正交分解 3.1引言3.3信号表示为傅里叶级数(FS)三角傅里叶级数1. 本质展开式1展开式2展开条件-狄利克雷条件分量概念补充 指数傅里叶级数使用条件形式1&#xff08;按连续信号的正交分解定义展开&#xff09;形式2&#xff08;由三角函数形式的傅里叶级数推导&#xf…

失误是我们工作的必经之路

“失误是成功之母”&#xff0c;这句话不仅是一句老话&#xff0c;更是贯穿着我们整个工作生涯中不断学习与成长的心理基石。在任何一个工作领域&#xff0c;我们都难免会遭遇失误&#xff0c;不管是在执行具体任务时出现的疏漏&#xff0c;还是在工作中出现的小错误。将错误看…

函数指针的使用

指针函数 指针函数&#xff1a;本质是函数&#xff0c;返回值是一个指针 int*arr(int,char); arr是一个函数&#xff0c;int,char是形参列表&#xff0c;int *作为一个整体&#xff0c;是 arr函数的返回值&#xff0c;是一个指针的形式。 函数指针 函数指针 :本质是一个指针&am…

python 小游戏 捕鱼达人

# 绘制所有小鱼 import os import random from setting import *import pygame# 所有鱼的父类 class Fish(pygame.sprite.Sprite):def __init__(self, init_dict: dict) -> None:super().__init__()# 小鱼每一帧的图片self.img_list []for each in os.listdir(init_dict[im…

c语言实现二叉树函数源码百度网盘,捕鱼赢钱的 -官方网站

php 最近在研究 Excel 中的 VBA ,也就是Excel 的宏,需要将第一个页面的值,等列排入第二个Sheet页中 就像第一个页面中 排列成 这个样子 首先需要缕缕自己的思路 我们需要获取到第一个Sheet 也的值 Set Destination Worksheets("Sheet1") 获取到以后,要如何去找到每一…

捕鱼达人(unity实现)

——个人笔记 这个是在画布下&#xff08;Canva&#xff09;实现的&#xff0c;会涉及到一些层次问题。如果要素材的话可以到&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1wcXVVs-4865rAw3vHrqSag 提取码&#xff1a;ip38 武器 武器实现就是根据鼠标的移动而选择&am…