611. 有效三角形的個數 - 力扣

1. 題目

給定一個包含非負整數的數組?nums?,返回其中可以組成三角形三條邊的三元組個數。

2. 示例

3. 分析?

利用已升序了的數組通過 a + b > c 這條公式找出符合要求的三元組,利用這個公式的前提是三條邊為從小到大,再利用單調性快速統計出符合要求的三元組個數。

解題方法:

  1. 先固定到最大的數(c),即nums[nums.size()-1]。
  2. 再最大數的左區間內,定位一左(a)一右(b)指針分別指向區間左右。

現在就可以開始尋找符合要求的三條邊了。
兩邊之和有兩種情況:

  • a + b > c
    這是符合要求的情況。我們知道數組是升序的,因為此時 left(a) + right(b) 已經是大于 c 了,那么[left+1, right-1] (a)這個區間內的數 + right(b) 也是肯定大于 c 了,因為數組是升序的(單調性)。所以此時符合要求的三元組個數就為(right-left),這個組合下的right(b)可以舍棄掉了,再--看下一個b的情況即可。
  • a + b <= c
    這是不符合要求的情況,為無效三角形。因為此時 left(a) + right(b) 已經是小于或等于 c 了,那么[left+1, right-1] (a)這個區間內的數 + right(b) 也是肯定小于或等于 c 了,因為數組是升序的(單調性)。這個組合下的left(a)可以舍棄掉了,再++看下一個a的情況即可。

當區間內的所以情況判斷完畢,即最大數的所有組合已統計完畢,再重新固定新的最大數,即上一個最大數的前一位數,再去統計符合要求的三元組個數。


class Solution {
public:int triangleNumber(vector<int>& nums) {// 1. 升序sort(nums.begin(), nums.end());// 2. 雙指針int ret = 0, n = nums.size();for(int i = n-1; i >= 2; i--)// 固定最大的數,因為是三元組,從2開始{// 利用雙指針統計出符合要求的三元組的個數int left = 0, right = i - 1;while (left < right){if (nums[left]+nums[right] > nums[i]){ret += right - left;right--;}else{left++;}}}return ret;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717900.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32 (1)

1.基本信息 stm32是由ST公司生產的一種32位微控制器&#xff08;單片機&#xff09;。 1.1 各種型號 stm32是32位單片機的總稱&#xff0c;有多種不同的系列。 32即用32個比特位表示一個地址&#xff0c;尋址范圍&#xff1a;0x00000000 --0xffffffff (4GB) 1.2 存儲密度 …

Mysql事務的兩段式提交

binlog和redo log區別 為了滿足Mysql的事物ACID特性&#xff0c;InnoDB引入了redo log和 undo log日志文件。為了滿足主從同步Mysql引入了binlog日志文件。redo log和binlog文件都保存的數據庫對數據庫的修改&#xff0c;但是binlog和redo log本質上是不一樣的&#xff1a; r…

UE5中實現后處理深度描邊

后處理深度描邊可以通過取得邊緣深度變化大的區域進行描邊&#xff0c;一方面可以用來做角色的等距內描邊&#xff0c;避免了菲尼爾邊緣光不整齊的問題&#xff0c;另一方面可以結合場景掃描等特效使用&#xff0c;達到更豐富的效果&#xff1a; 后來解決了開啟TAA十字線和鋸齒…

XXL-Job的基本使用

一、市面上常見的任務調度產品 針對分布式任務調度的需求&#xff0c;市場上出現了很多的產品: 其中XXL-job 是我們經常使用的任務調度平臺,XXL這三個英文字母.是以作者名許雪里命名的。 可以前往 Gitee 地址進行下載使用 https://gitee.com/xuxueli0323/xxl-job.git二、XXL-J…

使用`paddle.nn.Layer`自定義網絡教程

文章目錄 使用paddle.nn.Layer自定義網絡教程1. 概念介紹2. 數據處理3. 搭建一個完整的深度學習網絡4. 使用paddle.nn.Layer構建深度學習網絡5. 利用paddle.nn.Layer進行子層的訪問6. 修改paddle.nn.Layer層的成員變量7. 存儲模型的參數8. 總結 使用paddle.nn.Layer自定義網絡教…

LockBit病毒入侵揭秘:如何防范與應對

在數字時代&#xff0c;隨著科技的飛速發展&#xff0c;網絡安全問題愈發凸顯。惡意軟件和勒索軟件等網絡威脅正不斷演變&#xff0c;其中一款備受關注的勒索軟件就是LockBit。本文將深入介紹LockBit的特征、攻擊手段、演進歷程以及對網絡安全的威脅。 01 主要特征 LockBit是…

算法知識(java)隨筆

1: 保留指定的小數為 printf("%.2f\n", ret) 和c語言類似 // 怎么保留小數 System.out.printf("%.2f\n", 1.0/3); 2: 在寫小數二分的時候 加入讓結果保留6位數 那么 while(r - l > 1e-8) 3: java Map里面之前寫的代碼: /*** 也就是 統計x在map里面的…

第二十一周周報

文獻閱讀&#xff1a;Recent Advances of Monocular 2D and 3D Human Pose Estimation: A Deep Learning Perspective 摘要&#xff1a;在本文中&#xff0c;作者提供了一個全面的 2d到3d視角來解決單目人體姿態估計的問題。首先&#xff0c;全面總結了人體的二維和三維表征。…

騰訊云Windows輕量應用服務器的默認密碼是什么,以及如何重置?

首先&#xff0c;騰訊云輕量應用服務器的默認用戶名是沒有設置密碼的&#xff0c;首次登錄時需要重置密碼。這意味著如果你的輕量應用服務器是騰訊云的&#xff0c;那么默認密碼是不存在的&#xff0c;需要通過重置密碼來獲得一個新的密碼。 關于如何重置密碼&#xff0c;有幾…

chatgpt新版本api的調用

chatgpt新版本api的調用 原始版本調用api方式&#xff1a;新版調用chatgpt-api的方式&#xff1a; 原始版本調用api方式&#xff1a; import openaiopenai.api_key "{上面復制的key}"completion openai.ChatCompletion.create(model"gpt-3.5-turbo",mes…

Spring El表達式官方文檔學習

文章目錄 推薦一、概述1、什么是SpEL2、SpEL能做什么 二、SpEL表達式使用1、文字表達式2、屬性, 數組, List, Map,和 索引&#xff08;1&#xff09;屬性操作&#xff08;2&#xff09;數組和List&#xff08;3&#xff09;Map 3、內嵌List4、內嵌Map5、構建數組6、調用類的方法…

Windows的Linux化持續推進中

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Java基礎 - 6 - 面向對象(二)

Java基礎 - 6 - 面向對象&#xff08;一&#xff09;-CSDN博客 二. 面向對象高級 2.1 static static叫做靜態&#xff0c;可以修飾成員變量、成員方法 2.1.1 static修飾成員變量 成員變量按照有無static修飾&#xff0c;分為兩種&#xff1a;類變量、實例變量&#xff08;對象…

JavaScript 語句語法的教程

JavaScript 是一種廣泛應用于網頁開發的腳本語言&#xff0c;熟練掌握 JavaScript 的語法是成為一名優秀的前端開發工程師的必備技能之一。本教程將詳細介紹 JavaScript 中的語句語法&#xff0c;幫助初學者快速入門并加深對 JavaScript 語法的理解。 一、注釋 在 JavaScript…

常見的爬蟲逆向面試題

文章轉載于&#xff1a;https://mp.weixin.qq.com/s/dXRo0D_Xx7E_h85XbnwPVQ 有興趣去源站瀏覽學習 主要自己看著方便些 1.HTTS三次握手 目前使用的 HTTP/HTTPS 協議是基于 TCP 協議之上的&#xff0c;因此也需要三次握手。在 TCP 三次握手建立鏈接之后&#xff0c;才會進行 …

故障診斷 | 一文解決,XGBoost極限梯度提升樹的故障診斷(Matlab)

效果一覽 文章概述 故障診斷 | 一文解決,XGBoost極限梯度提升樹的故障診斷(Matlab) 模型描述 XGBoost通過集成多個決策樹來建立一個強大的預測模型。它采用了一種特殊的梯度提升技術,稱為極限梯度提升(Extreme Gradient Boosting),以提高模型的性能和魯棒性。 極限梯度…

【大數據Hive】hive 多字段分隔符使用詳解

目錄 一、前言 二、hive默認分隔符規則以及限制 2.1 正常示例&#xff1a;單字節分隔符數據加載示例 2.2 特殊格式的文本數據&#xff0c;分隔符為特殊字符 2.2.1 文本數據的字段中包含了分隔符 三、突破默認限制規則約束 3.1 數據加載不匹配情況 1 3.2 數據加載不匹配…

python paramiko 網絡系統運維

概述 背景&#xff1a;網絡系統運維與建設&#xff1a;工作中發現客戶使用python腳本批量操作網絡設備導出多臺網絡設備的配置定期執行相關的巡檢工作 修改配置 # -*- coding:utf8 -*- """ # editor: hjjdreamer # create-time: 2024/3/3-23:31 # Python-Scri…

Java項目推薦|幾個B站上的從零搭建項目

分享幾個B站上搜集到的技術比較全&#xff0c;講解也詳細的Java后端開發項目 目錄 谷粒商城 2020-03-31 iHRM 人力資源管理系統 2021-04-16 瑞吉外賣 2022-04-12 學成在線 2023-01-13 尚上優選 2023-06-06 黑馬頭條 2023-06-13 蒼穹外賣 2023-07-05 谷粒商城 2020-03-3…

命名實體識別NER

一、什么是命名實體識別&#xff1a; 命名實體&#xff1a;通常我們將人名、地名、機構名等專有名詞統稱命名實體&#xff0c;如&#xff1a;周杰倫&#xff0c;黑山縣&#xff0c;孔子學院&#xff0c;24方鋼直機 顧名思議&#xff0c;命名實體識別&#xff08;簡稱NER&#x…