【LeetCode每日一题】——611.有效三角形的个数

news2024/11/18 17:49:03

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 二分查找

二【题目难度】

  • 中等

三【题目编号】

  • 611.有效三角形的个数

四【题目描述】

  • 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

五【题目示例】

  • 示例 1:

    • 输入: nums = [2,2,3,4]
    • 输出: 3
      • 解释:有效的组合是:
        2,3,4 (使用第一个 2)
        2,3,4 (使用第二个 2)
        2,2,3
  • 示例 2:

    • 输入: nums = [4,2,3,4]
    • 输出: 4

六【解题思路】

  • 对于如何组成合法三角形,从小学我们就学过了:任意两边之和大于第三边。所以基于这个思路,我们只需要在数组中逐个判断任意两边之和是否大于第三边
  • 找到前两边比较简单,遍历即可,那么如何找到第三边呢?如果也通过遍历去寻找,很明显时间复杂度是 O ( n 3 ) O(n^3) O(n3),为了降低时间复杂度,我们可以使用二分查找来找到第三边,既然使用二分查找,就要首先对数组进行排序
  • 然后需要找到前两边,这个使用 f o r for for循环遍历即可
  • 找第三边的时候使用二分查找,我们只需要将中间值对应的边长和其余两边之和比较,如果中间值对应的边长大于或等于其余两边之和,这显然是不满足的,那么应该继续向左查找,因为左边的值比较小;反之应该向右查找,因为数组现在是有序的,中间值满足要求,那么小于中间值的也都满足要求,记录这个位置,并向右查找是否还有满足要求的值
  • 每次遍历将得到的结果累加记录,需要注意上一步记录位置的变量需要初始化为第二条边的位置,因为最后算个数的时候,没有满足要求的边就不会累加,否则会出错
  • 最后返回结果即可

七【题目提示】

  • 1 < = n u m s . l e n g t h < = 1000 1 <= nums.length <= 1000 1<=nums.length<=1000
  • 0 < = n u m s [ i ] < = 1000 0 <= nums[i] <= 1000 0<=nums[i]<=1000

八【时间频度】

  • 时间复杂度: O ( n 2 l o g n ) O(n^2logn) O(n2logn),其中 n n n为数组的长度
  • 空间复杂度: O ( l o g n ) O(logn) O(logn),其中 n n n为数组的长度

九【代码实现】

  1. Java语言版
class Solution {
    public int triangleNumber(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
        int res = 0;
        for(int i = 0;i<len;i++){
            for(int j = i + 1;j<len;j++){
                int left = j + 1;
                int right = len - 1;
                int k = j;
                while(left <= right){
                    int mid = (left + right) / 2;
                    if(nums[mid] >= nums[i] + nums[j]){
                        right = mid - 1;
                    }else{
                        k = mid;
                        left = mid + 1;
                    }
                }
                res += k - j;
            }
        }
        return res;
    }
}
  1. C语言版
int compare(int *a,int *b)
{
    return *a - *b;
}

int triangleNumber(int* nums, int numsSize)
{
    qsort(nums,numsSize,sizeof(int),compare);
    int len = numsSize;
    int res = 0;
    for(int i = 0;i<len;i++)
    {
        for(int j = i + 1;j<len;j++)
        {
            int left = j + 1;
            int right = len - 1;
            int k = j;
            while(left <= right)
            {
                int mid = (left + right) / 2;
                if(nums[mid] >= nums[i] + nums[j])
                {
                    right = mid - 1;
                }
                else
                {
                    k = mid;
                    left = mid + 1;
                }
            }
            res += k - j;
        }
    }
    return res;
}
  1. Python版
class Solution:
    def triangleNumber(self, nums: List[int]) -> int:
        nums.sort()
        n = len(nums)
        res = 0
        for i in range(0,n):
            for j in range(i + 1,n):
                left = j + 1
                right = n - 1
                k = j
                while left <= right:
                    mid = (left + right) // 2
                    if nums[mid] >= nums[i] + nums[j]:
                        right = mid - 1
                    else:
                        k = mid
                        left = mid + 1
                res += k - j
        return res

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库管理-第五十期 半百(20221230)

数据库管理 2022-12-30第五十期 半百1 半百2 展望3 计划总结第五十期 半百 1 半百 不知不觉&#xff0c;来到了第五十期&#xff0c;自从立了flag以后也几乎保持了一周一篇文章的频率&#xff0c;当然不得不承认&#xff0c;文章质量还是参差不齐的&#xff0c;有好几篇还是挺…

海尔智家:科技引领的目的是让用户生活幸福

随着时代发展&#xff0c;科技从未像今天这样影响着每个人的“幸福感”。因为科技&#xff0c;我们的通讯可以“随时随地”&#xff0c;交通出行可以“咫尺之间”&#xff0c;购物消费可以“跨越国界”......每一项引领科技的诞生&#xff0c;都能让用户的幸福生活更进一步。 …

git远程仓库下载以及上传

一、远程仓库 通常我们并不常亲自建立远程仓库&#xff0c;而是委托给『第三方』。 常见的操作是&#xff0c;先在第三方上创建『远程 Git 文档库』&#xff0c;然后复制&#xff08;Clone&#xff09;出一个『本地 Git 文档库』 1、在托管网站上创建远程仓库 常见的代码托管…

CDGA|自然资源数据治理五部曲,实现数据融合关联、共享可用

在自然资源行业&#xff0c;数据治理是自然资源信息化的工作基础&#xff0c;是推进自然资源治理体系和治理能力现代化进程的必经之路。 为积极应对数据治理新要求&#xff0c;着力解决资源分散、质量不齐、关联不高等问题&#xff0c;围绕自然资源治理对象&#xff0c;构建集…

有哪些好用的设备巡检类的软件?

现今许多企业&#xff0c;尤其是制造业&#xff0c;规模日趋机械化、自动化、大型化、高速化和复杂化&#xff0c;对设备巡检工作的要求越加精细。 因此&#xff0c;选择好的设备巡检软件&#xff0c;是设备管理的关键。为企业提供设备巡检的解决方案&#xff0c;确保设备巡检…

2022国内网络安全事件大盘点

转眼又到了年底&#xff0c;回望过去的一年&#xff0c;网络攻击事件依旧层出不穷&#xff0c;尤其以俄乌战争为代表&#xff0c;网络空间俨然已经成了第二战场。再回看国内&#xff0c;网络攻击导致的大规模数据泄露事件不但给企业带来巨额财务和品牌损失&#xff0c;同时随着…

项目实战-----产品经理要做什么?

文章目录写在前面&#xff1a;兴奋地开始干我在AR的第一个彻头彻尾的需求&#xff0c;发现原来产品经理脑袋竟然要转这么多圈&#xff0c;果然是术业有专攻啊~&#xff0c;但是既然要成为一个全栈工程师&#xff0c;我也来挑战一下吧~第一版显示我学的课还有我教的课&#xff0…

数据报告 | 美国民众健康状况和医疗需求研究报告

在美国&#xff0c;自2020年COVID-19流行开始&#xff0c;以数字健康为关键词的医疗领域正在发⽣⾰命性的变化。全球范围发生的疫情&#xff0c;促进了医疗行业的变革与创新。 本研究将从美国医疗费用和民众疾病等方面&#xff0c;对美国民众健康状况和医疗需求进行分析。 |美…

Android Kotlin之Coroutine(协程)详解

协程是一种并发设计模式&#xff0c;您可以在 Android 平台上使用它来简化异步执行的代码。 在 Android 上&#xff0c;协程有助于管理长时间运行的任务&#xff0c;如果管理不当&#xff0c;这些任务可能会阻塞主线程并导致应用无响应。 协程的优点&#xff1a; 轻量 您可以…

【日常系列】LeetCode《22·回溯1》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 112 和 113【剑指 34】 &#xff1a;路径总和 https://leetcode.cn/problems/path-sum/ https://leetcode.cn/problems/path-sum-ii/ 提示1&#xff1a…

一文分析Linux虚拟化KVM-Qemu(概念篇)

说明&#xff1a; KVM版本&#xff1a;5.9.1 QEMU版本&#xff1a;5.0.0 工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 从这篇文章开始&#xff0c;将开始虚拟化的系列研究了&#xff0c;大概会涉及到ARM64虚拟化支持、KVM、QEMU等分析&#xff1b; 虚拟…

小米裁员,我有话说

大家好&#xff0c;我是梦想家Alex 。好久没有为大家分享有关职场人生相关的文章了&#xff0c;最近阳康之后&#xff0c;灵感爆棚&#xff0c;想跟大家好好聊一聊。 如果你问我&#xff0c;近期互联网圈热度最高的事情&#xff0c;我想一定少不了小米和腾讯这两家科技巨头的身…

html实现ip输入框功能代码

伪代码&#xff1a; <style> .login-user {display: flex;color: #000;line-height: 30px; } .login-user input{height: 46px;border-radius: 4px;margin: 0px 4px; } </style><div class"layui-form-item login-user"><inp…

数据可视化②:bi解决方案之大学生就业分析

大学生就业是和我们息息相关的话题&#xff0c;每一位大学生都关注着&#xff0c;我们常常在网络上看到有关大学生就业的话题&#xff0c;比如毕业季的一些讨论。在大一的创新创业课中&#xff0c;我们也了解到自己所学的专业和以后如何就业&#xff0c;往哪方面就业。但我们了…

进程与线程的区别和联系是什么?

进程概念的引入 在多道程序的环境下&#xff0c;程序的并发执行代替了程序的顺序执行。它破坏了程序的封闭性和可再现性&#xff0c;使得程序和计算不再一一对应&#xff0c;而且由于资源共享和程序的并发执行导致在各个程序活动之间可能存在相互制约关系。总之&#xff0c;程…

MobTech秒验 I 寒冬加时,金融行业如何走出阴霾?

互联网流量红利将逝&#xff0c;企业运营重点已从“以产品为重心”转移至“以用户为导向”&#xff0c;而用户时间的碎片化及不聚焦&#xff0c;往往造成了线上运营推广投放后的石沉大海。 当下&#xff0c;迫切需要去做的是对存量数据的精细化管理&#xff0c;企业应打破数据…

Kafka的终极UI工具丨Offset Explorer功能简介

Offset Explorer&#xff08;以前称为Kafka Tool&#xff09;是一个用于管理和使Apache Kafka 集群的GUI应用程序。它提供了一个直观的UI&#xff0c;允许人们快速查看Kafka集群中的对象以及存储在集群主题中的消息。它包含面向开发人员和管理员的功能。 一些关键功能包括&…

Java 中的浅拷贝和深拷贝

开发过程中&#xff0c;有时会遇到把现有的一个对象的所有成员属性拷贝给另一个对象的需求。这个时候就会用到拷贝这个概念。把原对象定义成 A&#xff0c;拷贝后的对象定义成 B&#xff0c;如果只是单纯使用 clone 方法进行拷贝&#xff0c;你会发现&#xff1a; 对于八个基本…

基于unity物体定点移动与模拟刹车的细节 GIF 图文详解——线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 [unity常用API] ⭐相关文章&#xff1a;基础不牢&#xff0c;地动山摇系列 ------ 软硬通吃 unity常用API ⭐…

Arduino与Proteus仿真实例-TFT LCD绘制酷炫曲线图表

TFT LCD绘制酷炫曲线图表 本文将介绍如何在ILI9341 TFT LCD中绘制酷炫曲线图表仿真。 在前面的文章中,对ILI9341的驱动仿真作了详细的介绍,请参考: Arduino与Proteus仿真实例-TFT显示屏(ILI9341驱动器)SPI驱动仿真1、仿真电路原理图 2、仿真代码实现 本次实例使用到如下开…