【雙指針】有效三角形的個數

有效三角形的個數

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

題目描述

給定一個包含非負整數的數組 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

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000

算法原理

暴力解法

用三層for 循環 枚舉出所有的三元組,根據兩邊之和大于第三邊。

優化
  • 如果能構成三角形,需要滿足任意兩邊之和要大于第三邊。但是實際上只需讓較小的兩條邊
    之和大于第三邊即可。
  • 因此我們可以先將原數組排序,然后從小到大枚舉三元組,一方面省去枚舉的數量,另一方
    面方便判斷是否能構成三角形。
源碼如下
class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int n = nums.length, ret = 0;for(int i = 0; i < n; i++)for(int j = i + 1; j < n; j++)for(int k = j + 1; k < n; k++)if(nums[i] + nums[j] > nums[k]) ret++;return ret;}
}

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(), nums.end());int n = nums.size(), ret = 0;for(int i = 0; i < n; i++)for(int j = i + 1; j < n; j++)for(int k = j + 1; k < n; k ++)if(nums[i] + nums[j] > nums[k])ret++;return ret;}
};

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

暴力這東西就是懸啊~

那么下面我們講講雙指針算法

排序+雙指針

  • 首先還是將數組進行排序
  • 排序完的數組是有序的,那么此時我們可以固定最長邊,然后在比這條邊小的有序數組中找二元組,使二元組之和大于最長邊。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

用文字簡而言之來說就是:

  • 先固定最大數 O(n)
  • 在最大數的左區間內,使用雙指針算法,快速統計出符合要求的三元組個數

雙指針代碼編寫

Java代碼

class Solution {public int triangleNumber(int[] nums) {// 先對數組進行排序Arrays.sort(nums);// 利用雙指針解決問題int ret = 0, n = nums.length;for(int i = n - 1; i >= 2; i--){int left = 0, right = i - 1;while(left < right){if(nums[left] + nums[right] > nums[i]){ret += right - left;right--;}else{left++;}}}return ret;}
}
C++代碼
class Solution {
public:int triangleNumber(vector<int>& nums) {int ret = 0, n = nums.size();// 先排序sort(nums.begin(), nums.end());// 雙指針算法for(int i = n - 1; i >= 2; i--){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/163853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163853.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163853.shtml

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

相關文章

MIME 類型

MIME 類型 MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的標準&#xff0c;用來表示文檔、文件或字節流的性質和格式。 MIME 消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據。 瀏覽器通常使用 MIME 類型&#xff08;而不是文件擴展名&am…

如何編寫一份優質的測試用例?

前言 這篇文章主要是想要寫給測試小伙伴們的&#xff0c;因為我發現還是有很多小伙伴在遇到寫測試用例的時候無從下手&#xff0c;我就想和大家簡單的聊聊&#xff0c;分享一下我的一些見解和經驗。 用例的五個構成元素&#xff1a; 用例標題前置條件測試步驟期望結果后置條…

05 Powershell發送http請求

一&#xff1a;發送http請求 1、語法&#xff1a; Invoke-WebRequest -uri "請求地址" -UseBasicParsing 2、實例&#xff1a; $result Invoke-WebRequest -uri "http://rdc.mingyuanyun.com/rdc-service/api/v2/apps/$($app)/versions/maxpackversion"…

騰訊又出王炸產品!使用混元大模型進行數據報表測試

最近騰訊出了自己的大模型&#xff0c;命名混元。 現在已經開始內測&#xff0c;感謝騰訊小伙伴盧曉明同學幫我們提前申請到了內測機會&#xff0c;接下來我們用騰訊混元大模型與實際工作結合&#xff0c;開始我的報表測試之旅。 騰訊混元大模型官方入口:https://hunyuan.ten…

Java 基礎面試題大概有哪些?

Java基礎面試題的范圍非常廣泛&#xff0c;一般包括以下幾個方面&#xff1a; 一、Java基礎語法 數據類型&#xff1a;Java中包括基本數據類型和引用數據類型&#xff0c;基本數據類型包括byte、short、int、long、float、double、char、boolean&#xff0c;引用數據類型包括…

三十分鐘學會Shell(下)

Shell 3.1 運算符 3.1.1 算數運算符 在Shell腳本中&#xff0c;算術運算符用于執行基本的數學運算。Shell支持多種算術運算符&#xff0c;包括加、減、乘、除等。以下是關于Shell算術運算符的一些方法以及相應的示例說明&#xff1a; 加法&#xff1a; a10 b20 c$((a b)) …

【第二部分:結構】ARM Realm Management Monitor specification

目錄 概念Realm概述Realm執行環境Realm寄存器Realm內存Realm處理器功能IMPDEF系統寄存器 Realm屬性Realm活性Realm生命周期狀態狀態轉換 Realm參數Realm描述符 顆粒Granule顆粒屬性顆粒所有權顆粒生命周期狀態狀態轉換顆粒抹除 Realm執行上下文概述REC屬性REC指數和MPIDR值REC生…

洞悉今日,把握明日:咨詢公司的關鍵策略揭秘

在快節奏且充滿不確定性的商業環境中&#xff0c;能夠洞悉當前市場動態并預測未來趨勢的企業更有可能獲得成功。咨詢公司在這個過程中扮演著關鍵角色&#xff0c;本文將探討咨詢公司如何幫助企業洞悉現狀并把握未來趨勢&#xff0c;以及他們運用的關鍵策略。 咨詢公司的市場洞察…

百度地圖,地市區域描邊

描邊首先需要各個點的經緯度數據 json數據下載 直接復制粘貼進入頁面ctrls保存就可以了。 如果需要某省中的各個地市描邊可以點擊這個省的進行下載&#xff0c;這里以山東為例&#xff0c;我是先下載了山東的json數據,但是發現只有山東省下各個市的描邊&#xff0c;于是又下了中…

Mac下載的軟件顯示文件已損壞,如何解決文件已損壞問題,讓文件可以正常運行

Mac下載的軟件顯示文件已損壞&#xff0c;如何解決文件已損壞問題&#xff0c;讓文件可以正常運行 設備/引擎&#xff1a;Mac&#xff08;11.6&#xff09;/Mac Mini 開發工具&#xff1a;終端 開發需求&#xff1a;讓顯示已損壞的文件順利安裝到電腦 大家肯定都遇到過下載…

ESP32 MicroPython 顏色及二維碼識別?

ESP32 MicroPython 顏色及二維碼識別? 1、顏色識別2、二維碼識別 1、顏色識別 使用AI顏色識別功能&#xff0c;可以實現顏色辨別、顏色追蹤等應用。顏色識別模型內置有9種常見的顏色識別和一種顏色學習識別模式。他們分別是&#xff1a; ai.COLOR_RED 表示識別紅色 ai.COLOR…

【Linux】關系運算符、shell判斷腳本執行時是否有傳參、判斷文件/文件夾是否存在、判斷字符串是否相等、判斷上個命令執行是否正常、判斷字符串是否為空

&#x1f984; 個人主頁——&#x1f390;個人主頁 &#x1f390;?&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; 感謝點贊和關注 &#xff0c;每天進步一點點&#xff01;加油&#xff01;&…

全網最詳細的安裝pytorch GPU方法,一次安裝成功!!包括安裝失敗后的處理方法!

文章目錄 前提---查看是否有NVIDIV英偉達顯卡【笑哭】一、查看電腦的顯卡驅動版本方法一&#xff1a;在cmd命令窗口中輸入nvidia-smi&#xff0c;可以發現版本為12.2方法2&#xff1a;點擊NVIDIA控制面板→系統信息 二、安裝CUDA方法1&#xff1a; 在pytorch官網https://pytorc…

Redis高可用之主從復制及哨兵模式

一、Redis的主從復制 1.1 Redis主從復制定義 主從復制是redis實現高可用的基礎&#xff0c;哨兵模式和集群都是在主從復制的基礎之上實現高可用&#xff1b; 主從復制實現數據的多級備份&#xff0c;以及讀寫分離(主服務器負責寫&#xff0c;從服務器只能讀) 1.2 主從復制流…

學習Python和深度學習基礎

1. Python基礎知識 學習Python的基本語法、數據類型、控制流等基礎知識。掌握常用的Python庫&#xff0c;如NumPy和Pandas&#xff0c;它們在深度學習中經常被使用。 2. 深度學習基礎 了解深度學習的基本概念&#xff0c;包括神經網絡、前向傳播、反向傳播等。學習深度學習框…

Disasm 示例程序改寫和適配

Disasm 示例程序改寫和適配 簡介 用途 可用于反匯編x86的二進制匯編文件&#xff0c;展示出來內部的反匯編原理和流程。原由 最近在看<<C 反匯編與逆向分析技術揭秘>>這本書籍&#xff0c;在第一張的簡介中我們可以看到ProViem這個反匯編開源工具的內容&#x…

無線收發器芯片Si24R1 兼容替代NRF24L01

Si24R1是一款工作在2.4-2.5GHz世界通用ISM頻段的單片無線收發器芯片。無線收發器包括&#xff1a;頻率發生器、集成嵌入式ARQ基帶協議引擎、功率放大器、晶體振蕩器調制器、解調器。輸出功率頻道選擇和協議的設置可以通過SPI接口進行設置。是目前2.4G無線射頻芯片中&#xff0c…

Java 文件處理工具類詳解

在軟件開發中,文件處理是一個常見的任務,我們經常需要讀取、寫入和管理文件。為了更便捷地處理文件相關操作,我們編寫了一個 FileUtils 工具類,提供了一些有用的文件處理方法。 工具類介紹 FileUtils 工具類包含了一些常用的文件處理方法,主要功能如下: 獲取統一的文件…

Git本地庫操作

對本地庫的操作很少&#xff0c;我們學習1~6節即可&#xff0c;其他了解下。我們可以在idea中完成對本地庫還有遠程庫的操作&#xff0c;可視化界面用起來更加舒適而且也不會混淆。 1. Git概述 Git 是一個免費的、開源的分布式版本控制系統&#xff0c;可以快速高效地處理從小…