【附JS、Python、C++題解】Leetcode面試150題(9)——三數之和

一、題目?????

15. 三數之和

給你一個整數數組?nums?,判斷是否存在三元組?[nums[i], nums[j], nums[k]]?滿足:
i!=ji!=k?且?j!= k?,同時還滿足:nums[i] + nums[j] + nums[k] == 0?。請你返回所有和為?0?且不重復的三元組。

注意:答案中不可以包含重復的三元組。

二、思路

1. 我們要返回的是“所有和為0且不重復的三元組”,這是一個數組類型,數組里的每一個元素都是三元組;

2. 要有三個用于遍歷的指針;

3. 判斷條件就兩個:

  • i!=ji!=k?且?j!= k?
  • nums[i] + nums[j] + nums[k] == 0、

4. 如果直接遍歷,重復次數太多了,如何解決?

【聯想到“兩數之和Ⅱ”的那道題,因為有了一個“非嚴格遞增”的順序條件,我們得以簡化遍歷的過程;在這里也可以借鑒這個思路——創造一個順序出來】

該題題解見如下文章:
【附JS、Python、C++題解】Leetcode面試150題(7)-CSDN博客

三、代碼

① JavaScript

function threeNums(nums){nums.sort((a,b)->a-b);let res = [];let l = nums.length;for(let i = 0; i<l-2; i++){if(i>0 && nums[i]===nums[i-1]){continue;}let j = i+1;let k = l-1;while(j<k){const sum = nums[i] + nums[j] + nums[k];if(sum === 0){res.push([nums[i], nums[j], nums[k]]);while(j<k && nums[j] === nums[j+1]){j++;}while(j<k && nums[k] === nums[k-1]){k--;}j++;i--;}else if(sum<0){j++;}else{K--;}}}return res;
}

② Python

def three_sum(nums):nums.sort()  # 先對數組進行排序res = []length = len(nums)for i in range(length - 2):if i > 0 and nums[i] == nums[i - 1]:continuej, k = i + 1, length - 1while j < k:total = nums[i] + nums[j] + nums[k]if total == 0:res.append([nums[i], nums[j], nums[k]])# 避免重復計算while j < k and nums[j] == nums[j + 1]:j += 1while j < k and nums[k] == nums[k - 1]:k -= 1j += 1k -= 1elif total < 0:j += 1else:k -= 1return res

③ C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;int length = nums.size();// 先對數組進行排序sort(nums.begin(), nums.end());for (int i = 0; i < length - 2; ++i) {if (i > 0 && nums[i] == nums[i - 1]) {continue;}int j = i + 1;int k = length - 1;while (j < k) {int total = nums[i] + nums[j] + nums[k];if (total == 0) {res.push_back({nums[i], nums[j], nums[k]});// 避免重復計算while (j < k && nums[j] == nums[j + 1]) {++j;}while (j < k && nums[k] == nums[k - 1]) {--k;}++j;--k;} else if (total < 0) {++j;} else {--k;}}}return res;
}

四、反思

這道題自己做的時候并沒有先進行排序,導致重復的次數很多。下次遇到遍歷很復雜的問題,要先進行處理!!

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

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

相關文章

開源、創新與人才發展:機器人產業的戰略布局與稚暉君成功案例解析

目錄 引言 一、開源&#xff1a;機器人產業的戰略布局 促進技術進步和生態建設 吸引人才和合作伙伴 建立標準和網絡效應 降低研發風險與成本 二、稚暉君&#xff1a;華為"天才少年計劃"的成功典范 深厚的技術積累與動手能力 強烈的探索和創新意識 持續公開…

Android筆記:Android平臺下SVG格式的解析與實踐

在移動應用開發的廣闊天地里,開發者們始終致力于打造視覺效果卓越、適配各類設備屏幕的優質應用。SVG(Scalable Vector Graphics,可縮放矢量圖形)作為基于 XML 的圖形格式,以其鮮明特性,為 Android 開發者提供了實現這一愿景的關鍵路徑。接下來,本文將全方位深入解析在 …

mac本地部署Qwq-32b記錄

導語 昨天看到阿里開源了Qwq-32b&#xff0c;號稱性能可以媲美Deepseek-R1。今天晚上有空就在Mac上折騰了一下&#xff0c;使用ollma進行了部署&#xff0c;效果感覺還不錯&#xff0c;特此記錄。 環境 硬件 型號&#xff1a;Macbook M1 Pro 14寸內存&#xff1a;32G 環境…

blender學習25.3.11

【05-進階篇】Blender咖啡小場景之咖啡杯建模_嗶哩嗶哩_bilibili 杯子 首先做一個圓柱體 循環切割 crtlr 往下拖拽 框住按s往里收 Gz向上點 點擊頂面按插入i&#xff0c;往里收一下&#xff0c;這樣就插入了一個面 插入完成之后選中這個面&#xff0c;按下鍵盤的擠壓E 然后…

數據可信、隱私可控:CESS 如何打造波卡生態數據新基建?

原文&#xff1a;https://messari.io/report/cess-network-a-deep-dive-into-programmable-data-value-infrastructure作者&#xff1a;Messari編譯&#xff1a;OneBlock波卡生態一直以來以其跨鏈互操作性和靈活性吸引了眾多創新項目&#xff0c;尤其是在 DePIN&#xff08;去中…

Android 列表頁面終極封裝:SmartRefreshLayout + BRVAH 實現下拉刷新和加載更多

在 Android 開發中&#xff0c;列表頁面是常見的 UI 設計模式&#xff0c;而下拉刷新和加載更多是提升用戶體驗的關鍵功能。本文將帶你從零開始&#xff0c;封裝一個高復用性的 SmartRefreshHelper 工具類&#xff0c;結合 SmartRefreshLayout 和 BRVAH&#xff0c;實現高效、靈…

css基本功

為什么 ::first-letter 是偽元素&#xff1f; ::first-letter 的作用是選擇并樣式化元素的第一個字母&#xff0c;它創建了一個虛擬的元素來包裹這個字母&#xff0c;因此屬于偽元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…

基于WebRTC技術的EasyRTC嵌入式音視頻SDK:多平臺兼容與性能優化

在當今數字化、智能化的時代背景下&#xff0c;實時音視頻通信技術已成為眾多領域不可或缺的關鍵技術。基于WebRTC技術的EasyRTC嵌入式音視頻SDK&#xff0c;憑借其在ARM、Linux、Windows、安卓、iOS等多平臺上的兼容性&#xff0c;為開發者提供了強大的工具&#xff0c;推動了…

【Pandas】pandas Series last_valid_index

Pandas2.2 Series Time Series-related 方法描述Series.asfreq(freq[, method, how, …])用于將時間序列數據轉換為指定的頻率Series.asof(where[, subset])用于返回時間序列中指定索引位置的最近一個非缺失值Series.shift([periods, freq, axis, …])用于將時間序列數據沿指…

批量將 Excel 文檔中的圖片提取到文件夾

前面我們介紹過如何批量刪除 Excel 文檔中的所有圖片或者指定的圖片&#xff0c;其中就需要用到批量提取 Excel 文檔中圖片的操作。我們如何才能夠將 Excel 文檔中的圖片快速的提取出來呢&#xff1f;其實單個 Excel 文檔中的圖片提取到文件夾中是有多種方法可以完成的&#xf…

【氮化鎵】開態GaN HEMTs中氧誘導Vth漂移的缺陷演化

2019年,中國工程物理研究院電子工程研究所的Rong Wang等人基于實驗研究和第一性原理計算,研究了開啟態偏置下AlGaN/GaN高電子遷移率晶體管(HEMTs)中氧誘導的閾值電壓(Vth)漂移的缺陷演化機理。實驗結果表明,在開啟態應力作用下,T型柵AlGaN/GaN HEMT的Vth發生了明顯的負…

谷粒商城:性能壓測JVM堆區

目錄 Kit Apache JMeter VisualVM 堆內存 jvm內存模型 垃圾回收&#xff08;Garbage Collection, GC&#xff09; 新對象分配內存 GC步驟 MinorGC 性能優化 影響因素 優化 nginx動靜分離 優化三級分類獲取 Jvm參數配置堆區 測試 Kit Apache JMeter 壓力測試&…

STM32全系大閱兵(2)

接前一篇文章:STM32全系大閱兵(1) 本文內容參考: STM32家族系列的區別_stm32各個系列區別-CSDN博客 STM32--STM32 微控制器詳解-CSDN博客

7、基于osg引擎實現讀取vtk數據通過著色器實現簡單體渲染(1)

1、頂點著色器代碼 #version 110 /* GLSL 1.10需要顯式聲明精度 (OpenGL ES要求) */ #ifdef GL_ES precision highp float; #endif // 體數據采樣步長 uniform float xStepSize,yStepSize,zStepSize; // 體數據紋理和顏色紋理 uniform sampler3D baseTexture; uniform sample…

基于Ollama平臺部署的Qwen大模型實現聊天機器人

文章目錄 基于Ollama平臺部署的Qwen大模型實現聊天機器人1 概述2 技術棧2.1 開發技術2.2 環境 3 實現步驟3.1 環境搭建3.1.1 WSL配置及Ubuntu安裝3.1.2 Ollama安裝及模型部署 3.2 模塊安裝3.2.1 安裝Streamlit 1.42.23.2.2 安裝requests 2.32.33.2.3 安裝ollama 0.4.7 3.3 后端…

用DasViewer的時候3Dtiles 轉osgb 可以直接指定目標坐標系嗎?

沒有指定坐標系選項&#xff0c;可以轉換后&#xff0c;再進行一次坐標系轉換。 DasViewer是一款免費極速實景三維模型瀏覽器&#xff0c;采用多細節層次模型逐步自適應加載技術,讓用戶在極低的電腦配置下,也能流暢的加載較大規模實景三維模型,提供方便快捷的數據瀏覽操作。 目…

【MySQL】MySQL服務器——mysqld

1.MySQL服務器 是名為 mysqld 的數據庫服務器程序&#xff0c;和“主機”&#xff08;host&#xff09;不一樣是一個多線程的單進程管理對磁盤和內存中數據庫的訪問支持并發的客戶端連接支持多個存儲引擎&#xff0c;常見的存儲引擎包括InnoDB、MyISAM、Memory、Archive支持事…

vue啟動 localhost無法訪問

1. localhost 和 127.0.0.1 雖然都指向本機&#xff0c;但它們有細微的區別&#xff1a; - localhost 是一個域名&#xff0c;需要通過 DNS 解析或本地 hosts 文件解析為 IP 地址 - 127.0.0.1 是直接的 IP 地址&#xff0c;不需要解析過程 2. 無法訪問 localhost 的可…

爬蟲案例十三js逆向模擬登錄中大網校

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、網站分析二、代碼 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; js 逆向模擬登錄中大網校 提示&#xff1a;以下是本篇文章正文內…

Java IO 與文件系統:File 類與流操作詳解

在 Java 編程中&#xff0c;IO&#xff08;輸入輸出&#xff09;操作是處理文件和數據流的核心部分。本文將圍繞文件系統、硬盤存儲、Java 的 File 類以及 InputStream 和 OutputStream 的使用進行詳細總結&#xff0c;幫助讀者全面掌握 Java IO 編程的核心知識。 一、IO、存儲…