每日演算法之和為S的兩個數字

来源:https://www.cnblogs.com/loongnuts/archive/2022/12/25/17003784.html
-Advertisement-
Play Games

JZ57 和為S的兩個數字 題目 輸入一個升序數組 array 和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,返回任意一組即可,如果無法找出這樣的數字,返回一個空數組即可。 方法1 暴力解題 思路 演算法實現 兩次迴圈,兩個值相加與sum進行比較,為true直接br ...


JZ57 和為S的兩個數字

題目

輸入一個升序數組 array 和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,返回任意一組即可,如果無法找出這樣的數字,返回一個空數組即可。

方法1 暴力解題

思路

演算法實現

兩次迴圈,兩個值相加與sum進行比較,為true直接break即可

代碼

package mid.JZ57和為S的兩個數字;

import java.util.ArrayList;
public class Solution {
    /**
     * 暴力計算
     * @param array
     * @param sum
     * @return
     * 運行時間     1084ms
     * 占用記憶體     28348KB
     */
    private ArrayList<Integer> FindNumbersWithSum1(int[] array, int sum) {
        ArrayList<Integer> res = new ArrayList<>();
        if(array.length == 0) return res;
        for(int i = 0; i < array.length; i++) {
            for(int j = 0; j < array.length; j++) {
                if(array[i] + array[j] == sum) {
                    res.add(array[i]);
                    res.add(array[j]);
                    return res;
                }
            }
        }
        return res;
    }
}

方法2 雙指針

思路

演算法實現

這道題目還有一個條件是數組是升序序列,在方法一中沒有用到。這個條件有什麼用?
既然數組是有序的,那我們肯定知道和找到一定程度就不找了,我們為什麼要從最小的兩個數開始相加呢?
我們可以用二分法的思路,從中間開始找。

使用雙指針指向數組第一個元素和最後一個元素,然後雙指針對撞移動,如果兩個指針下的和正好等於目標值sum,那我們肯定找到了,如果和小於sum,說明我們需要找到更大的,那隻能增加左邊的元素,如果和大於sum,說明我們需要找更小的,只能減小右邊的元素。

具體做法:

step 1:準備左右雙指針分別指向數組首尾元素。
step 2:如果兩個指針下的和正好等於目標值sum,則找到了所求的兩個元素。
step 3:如果兩個指針下的和大於目標值sum,右指針左移;如果兩個指針下的和小於目標值sum,左指針右移。
step 4:當兩指針對撞時,還沒有找到,就是數組沒有。

代碼

package mid.JZ57和為S的兩個數字;

import java.util.ArrayList;
public class Solution {
    /**
     * 雙指針
     * @param array
     * @param sum
     * @return
     * 運行時間
     * 250ms
     * 占用記憶體
     * 27188KB
     */
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> res = new ArrayList<>();
        int left = 0, right = array.length - 1;
        while(left < right) {
            if (array[left] + array[right] == sum) {
                res.add(array[left]);
                res.add(array[right]);
                return res;
            } else if (array[left] + array[right] < sum){
                left++;
            } else {
                right--;
            }
        }
        return res;
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實踐環境 win10 Python 3.6.2 odoo_14.0.latest.tar.gz 下載地址: https://download.odoocdn.com/download/14/src?payload=MTY3MDg1MTM3Ni4xNC5zcmMud0tZRWZLX2I5UVF0Tm5 ...
  • 難得釘釘官方提供了完整的 api sdk,各種語言的版本的都有,而且 api 覆蓋面非常完整。但是,composer 安裝下來有大幾十兆,這個不符合個人的品味,我想要按需載入。 於是在構思了一兩次以後,今天下午開始動手實現。 首要原則,不做手工勞動,人工分包,然後提交到 packagist 倉庫,那 ...
  • 在 C++98/03 標準中,類模板可以有預設的模板參數,如下: template <typename T, typename U = int, U N = 0> struct Foo { // ... }; 但是卻不支持函數的預設模板參數: template <typename T = int> ...
  • 數據在電腦內部是以二進位形式表示的,而數據有各種各樣的類型(比如數值、文本、日期......),不同類型的數據具有不同的特點,如果按照統一的格式進行處理,會很不方便。 為此,高級語言引入了數據類型的概念,用於對數據進行歸類,以便理解和操作。 數據類型分為基本數據類型和引用(對象)數據類型。其中,基 ...
  • 什麼是Lombok Lombok是一個Java庫,能自動插入編輯器並構建工具,簡化Java開發。 官網: https://www.projectlombok.org/ Lombok的作用 通過 添加註解 的方式,Lombok能以簡單的註解形式來簡化java代碼,提高開發人員的開發效率。 例如開發中經 ...
  • 哈嘍兄弟們,我是鄭再陽,馬上要成楊過了! 讀者:在下羊了個羊! 最近總是聽說哪裡哪裡陽了,哪個公司又團滅了,emmm~ 於是乎看了幾天後,終於輪到咱了,全公司同一天中招,直呼好家伙! 還好咱們備藥了,但是我就是不吃,哎就是玩,憑著強健的體魄,我硬是一顆藥沒吃挺過來了,吃藥的和沒吃藥的差不多,都是四天 ...
  • 準備工作開發環境 Python版本:3.7.8 相關模塊:requests模塊;tqdm模塊;pyfreeproxy模塊;pyechats模塊;以及一些python自帶的模塊。 效果預覽開始界面 游戲規則 wasd 控制人物的移動,空格啟動律師函炸毀全部籃球。 代碼實現 導入模塊 import py ...
  • P5721 【深基4.例6】數字直角三角形 1.題目描述 給出 n,請輸出一個直角邊長度是 n 的數字直角三角形。所有數字都是 2 位組成的,如果沒有 2 位則加上前導 00。 2.輸入格式 輸入一個正整數 n。 3.輸出格式 輸出如題目要求的數字直角三角形。 4.輸入輸出樣例 4.1輸入 5 4. ...
一周排行
    -Advertisement-
    Play Games
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 1 文本Embedding 將整個文本轉化為實數向量的技術。 Embedding優點是可將離散的詞語或句子轉化為連續的向量,就可用數學方法來處理詞語或句子,捕捉到文本的語義信息,文本和文本的關係信息。 ◉ 優質的Embedding通常會讓語義相似的文本在空間中彼此接近 ◉ 優質的Embedding相 ...