Leetcode 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

提示:

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

思路

題目判斷三角形,首先我們需要回顧一個小學知識點,三角形的兩邊和是要大于第三邊的,所以按常理講拿到三個數后需要來回判斷三次,而直接暴力枚舉的話,會大大增加時間復雜度,這里首先就可以做一個優化,先把三個數從小到大排,這樣只用判斷一次即可。

暴力枚舉三次for循環來依次遍歷,復雜度為n^3。明顯不可取。

通過上述小小優化可以先對數組進行一次排序,讓其先變的有序,有序后更方便進行枚舉。

此時可以利用雙指針(這里是三指針)通過單調性來對數據進行遍歷。

上圖為例,先固定出一個最大的數作為c,然后讓其他數依次組合來進行遍歷,最左為a最右為b,滿足的情況和為sum。

初步判斷a+b>c,所以符合條件,同時可以得出a往右到b之間所有的數相加都滿足此條件,b直接--左移。sum+=b-a。

?此時right指向的數為5,此時判斷a+b<c,此時也可以得出a往右到b之間所有的數相加都不滿足此條件,因為此時b是這個區間中的最大數,b都不滿足,比b小的自然也不滿足,left++向右移動一位。

然后依次重復此過程,直到left和right相遇,此時c為10的情況就遍歷完成,然后c--,a b分別重置。

題解

class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(),nums.end());int a=0,b=nums.size()-2,c=nums.size()-1;int sum=0;while(c>=2){while(a<b){if(nums[a]+nums[b]>nums[c]){sum+=(b-a);--b;}else{++a;}}--c;a=0;b=c-1;}return sum;}
};

?

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

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

相關文章

Android的LiveData

LiveData 是一種可觀察的數據存儲器類。與常規的可觀察類不同&#xff0c;LiveData 具有生命周期感知能力&#xff0c;意指它遵循其他應用組件&#xff08;如 activity、fragment 或 service&#xff09;的生命周期。這種感知能力可確保 LiveData 僅更新處于活躍生命周期狀態的…

ChatGPT在醫學領域的應用與前景

標題&#xff1a; ChatGPT在醫學領域的應用與前景 正文&#xff1a; 隨著人工智能技術的不斷進步&#xff0c;ChatGPT等語言模型在醫學領域的應用逐漸深入&#xff0c;展現出其巨大的潛力和廣闊的發展前景。作為一個高級的自然語言處理工具&#xff0c;ChatGPT能夠理解和生成…

WPF 開發調試比較:Visual Studio 原生和Snoop調試控制臺

文章目錄 前言運行環境簡單的WPF代碼實現一個簡單的ListBoxVisual Studio自帶代碼調試熱重置功能測試實時可視化樹查找窗口元素顯示屬性 Snoop調試使用Snoop簡單使用調試控制臺元素追蹤結構樹Visual/可視化結構樹Logical/本地代碼可視化樹AutoMation/自動識別結構樹 WPF元素控制…

基于springboot+vue的房屋租賃管理系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

【OpenAI官方課程】第四課:ChatGPT文本推斷Summarizing

歡迎來到ChatGPT 開發人員提示工程課程&#xff08;ChatGPT Prompt Engineering for Developers&#xff09;&#xff01;本課程將教您如何通過OpenAI API有效地利用大型語言模型&#xff08;LLM&#xff09;來創建強大的應用程序。 本課程由OpenAI 的Isa Fulford和 DeepLearn…

手拉手Vite+Vue3+TinyVue+Echarts+TailwindCSS

技術棧springboot3hutool-alloshi-coreVue3viteTinyVueEchartsTailwindCSS軟件版本IDEAIntelliJ IDEA 2022.2.1JDK17Spring Boot3.1hutool-all5.8.18oshi-core6.4.1Vue35.0.10vite5.0.10axios1.6.7echarts5.4.3 ECharts是一個使用 JavaScript 實現的開源可視化庫&#xff0c;可…

快速搭建ARM64實驗平臺(QEMU虛擬機+Debian)

文章目錄 前言一、實驗平臺介紹二、安裝步驟2.1 安裝工具2.2 下載倉庫2.3 編譯內核并制作根文件系統2.4 運行剛才編譯好的ARM64版本的Debian系統2.5 在線安裝軟件包2.6 在QEMU虛擬機和主機之間共享文件 三、單步調試ARM64 Linux內核參考資料 前言 最近翻閱笨叔的《奔跑吧Linux…

go-zero微服務入門教程

go-zero微服務入門教程 本教程主要模擬實現用戶注冊和用戶信息查詢兩個接口。 準備工作 安裝基礎環境 安裝etcd&#xff0c; mysql&#xff0c;redis&#xff0c;建議采用docker安裝。 MySQL安裝好之后&#xff0c;新建數據庫dsms_admin&#xff0c;并新建表sys_user&#…

【Git】 刪除遠程分支

Git 刪除遠程分支有以下幾種方法 服務端UI工具 Git 的服務端圖形化工具主要是 web 端。常用的有 GitHub、Gitea、Gutlab 等。 這些工具都提供了分支管理&#xff0c;可以直接在各服務端找到相關功能&#xff0c;謹慎刪除。 客戶端UI工具 Git 擁有諸多客戶端 UI 工具&#x…

詳細分析Python中的unittest測試框架

目錄 1. 基本知識2. API2.1 斷言2.2 setUp() 和 tearDown() 3. Demo 1. 基本知識 unittest 是 Python 標準庫中的一個單元測試框架&#xff0c;用于編寫和執行測試用例以驗證代碼的正確性 提供了一種結構化的方法來編寫測試&#xff0c;使得測試代碼更加模塊化和易于維護 以…

【ACW 服務端】頁面操作Java增刪改查代碼生成

版本: 1.2.2-JDK17-SNAPSHOT 項目地址&#xff1a;wu-smart-acw 演示地址&#xff1a;演示地址 admin/admin Java增刪改查代碼生成 找到對應菜單 選擇你需要的數據實例 選擇數據庫 選擇數據庫表 選擇客戶端&#xff08;如果是本地ACW服務代碼啟動默認注冊上的客戶端ID是…

騰訊云主機Ubuntu22.04安裝Odoo17

一、安裝PostgreSQL16 參見之前的文章 Ubuntu22.04安裝PostgreSQL-CSDN博客 二、安裝Odoo17 本方案使用的nightly版的odoo&#xff0c;安裝的都是最新版odoo wget -O - https://nightly.odoo.com/odoo.key | apt-key add - echo "deb http://nightly.odoo.com/17.0/n…

Maven【1】(命令行操作)

文章目錄 一丶創建maven工程二、理解pom.xml三、maven的構建命令1.編譯操作2.清理操作3.測試操作4.打包操作5.安裝操作 一丶創建maven工程 首先創建這樣一個目錄&#xff0c;然后從命令行里進入這個目錄&#xff1a; 然后接下來就在這個命令行里進行操作了。 這個命令是&…

Python學習筆記——PySide6設計GUI應用之UI與邏輯分離

1、打開PySide6的UI設計工具pyside6-designer&#xff0c;設計一個主窗口&#xff0c;保存文件名為testwindow.ui 2、使用PySide6的RCC工具把testwindow.ui文件轉換為testwindow_rc.py文件&#xff0c;此文件中有一個類Ui_MainWindow&#xff08;包含各種控件對象&#xff09;…

設計模式淺析(八) ·外觀模式

設計模式淺析(八) 外觀模式 日常叨逼叨 java設計模式淺析&#xff0c;如果覺得對你有幫助&#xff0c;記得一鍵三連&#xff0c;謝謝各位觀眾老爺&#x1f601;&#x1f601; 外觀模式 概念 外觀模式&#xff08;Facade Pattern&#xff09;是一種設計模式&#xff0c;它為…

深度學習發展里程碑事件2006-2024

2006-2024年&#xff0c;深度學習發展經歷眾多的里程碑事件&#xff0c;一次次地刺激著人們的神經&#xff0c;帶來巨大的興奮。電影還在繼續&#xff0c;好戲在后面&#xff0c;期待…… 2006年 深度信念網絡&#xff08;DBNs&#xff09;&#xff1a;Geoffrey Hinton與他的學…

備戰藍橋杯 Day10(背包dp)

01背包問題 1267&#xff1a;【例9.11】01背包問題 【題目描述】 一個旅行者有一個最多能裝 M&#xfffd; 公斤的背包&#xff0c;現在有 n&#xfffd; 件物品&#xff0c;它們的重量分別是W1&#xff0c;W2&#xff0c;...,Wn&#xfffd;1&#xff0c;&#xfffd;2&#…

藍橋杯刷題--python-10(2023填空題3)

0工作時長 - 藍橋云課 (lanqiao.cn) import datetime time_str_list=[] while(True):tmp=input()if not tmp: breaktime_str_list.append(tmp)# time_list=[datetime.datetime.strptime(t,"%Y-%m-%d %H:%M:%S")for t in time_str_list] time_list.sort() sum=0 for i…

【代碼隨想錄算法訓練營Day25】● 216.組合總和III ● 17.電話號碼的字母組合

文章目錄 Day 25 第七章 回溯算法part02216.組合總和III自己的思路&#xff08;?通過&#xff09; 17.電話號碼的字母組合思路代碼 Day 25 第七章 回溯算法part02 今日內容&#xff1a; ● 216.組合總和III● 17.電話號碼的字母組合 216.組合總和III 如果把 組合問題理解了…

計算機組成原理(9)----硬布線控制器

控制單元CU若想發出對應的控制信號&#xff0c;則需要以下信息&#xff1a;指令操作碼&#xff0c;目前的機器周期&#xff0c;節拍信號&#xff0c;機器狀態條件&#xff0c;根據這些信息&#xff0c;CU就能確定在這個節拍下應該發出哪些"微命令"&#xff0c;也就是…