LeetCode刷題記錄——day2

来源:https://www.cnblogs.com/humanplug/p/18086016
-Advertisement-
Play Games

https://leetcode.cn/problems/product-of-array-except-self/description/?envType=study-plan-v2&envId=top-interview-150 問題在於不使用除法並且空間複雜度為O(1),當第一次從頭開始遍歷時 ...


https://leetcode.cn/problems/product-of-array-except-self/description/?envType=study-plan-v2&envId=top-interview-150
問題在於不使用除法並且空間複雜度為O(1),當第一次從頭開始遍歷時由於不知道後續數組元素是什麼,所以無法得到答案,而如果當知道一個後續數組元素後,又回去更新答案的話,無疑會提高時間複雜度。不妨這樣看待,如果我們已經遍歷一次數組並且能夠記錄下足夠的信息的話,那麼下次我們再次遍曆數組時不就可以相對地知道後續元素的信息了嗎。由此推廣,為了演算法簡單一些,我們甚至可以遍歷有限次,獲得足夠的信息,然後一次得到最終答案。
由這樣的思路我們再看問題,對於任何一個元素,其除了自身以外的的元素的乘積由兩個部分構成,一個是它的前序元素乘積,一個是後續元素乘積。前者可以通過正向的遍歷得到,後者通過反向遍歷也可以得到,由此答案就明瞭了;

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int len = nums.size();
        vector<int> answer(len);
        int answer_R[len],answer_L[len];
        answer_L[0]=1,answer_R[len-1]=1;
        for(int i=1;i<len;i++){
            answer_L[i]=answer_L[i-1]*nums[i-1];
        }
        for(int i=len-2;i>=0;i--){
            answer_R[i]=answer_R[i+1]*nums[i+1];
        }
        for(int i=0;i<len;i++){
            answer[i]=answer_L[i]*answer_R[i];
        }
        return answer;
    }
};

同理,其實我們不需要兩個數組,只需要一個中間變數記錄後續乘積的過程就可以了,這樣可以減小空間複雜度;

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int len = nums.size();
        vector<int> answer(len);
        answer[0]=1;
        for(int i=1;i<len;i++){
            answer[i]=answer[i-1]*nums[i-1];
        }
        int temp=nums[len-1];
        for(int i=len-2;i>=0;i--){
            answer[i]=temp*answer[i];
            temp=temp*nums[i];
        }
        return answer;
    }
};

本文由博客一文多發平臺 OpenWrite 發佈!


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

-Advertisement-
Play Games
更多相關文章
  • 我不會長大後再學習我不會長大後再學習我不會長大後再學習我不會長大後再學習我不會長大後再學習我不會長大後再學習 ...
  • 1.根目錄概念: 1.1 項目根目錄(Project Root) 項目根目錄是你在文件系統中為整個項目選擇的頂層目錄。 它通常包含了項目的所有內容,包括源代碼、構建配置文件、文檔、測試文件等。 在版本控制系統中(如 Git),項目根目錄通常是倉庫的根目錄。 1.2 內容根目錄(Content Roo ...
  • 在這篇文章中,我們深入學習了XPath作為一種常見的網路爬蟲技巧。XPath是一種用於定位和選擇XML文檔中特定部分的語言,儘管最初是為XML設計的,但同樣適用於HTML文檔的解析。我們探討瞭如何使用XPath來定位元素並提取所需信息。 ...
  • 拓展閱讀 Devops-01-devops 是什麼? Devops-02-Jpom 簡而輕的低侵入式線上構建、自動部署、日常運維、項目監控軟體 代碼質量管理 SonarQube-01-入門介紹 項目管理平臺-01-jira 入門介紹 缺陷跟蹤管理系統,為針對缺陷管理、任務追蹤和項目管理的商業性應用軟 ...
  • 概述:C++中模板必須在頭文件中實現,因為編譯器需要可見的實現以生成模板具體實例的代碼。通過頭文件,確保模板在每個編譯單元中都能被正確展開,提高可維護性。 在C++中,模板只能在頭文件中實現的主要原因是編譯器在使用模板時需要生成對應的代碼,而這部分代碼必須在編譯時可見。以下是詳細的解釋和示例。 基礎 ...
  • 概述:在C++中,儘管存在技巧在其範圍之外訪問局部變數的記憶體,但這是不安全和易導致未定義行為的做法。通過指針或動態記憶體分配可能違反變數的生命周期和作用域規則,應當避免使用以確保代碼安全性。 在C++中,局部變數的生命周期和作用域限制了它們的訪問範圍,通常不應該在其範圍之外訪問其記憶體。然而,通過一些技 ...
  • java 實現郵件推送 Java實現郵件推送功能 一、引入依賴 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dep ...
  • C++ 簡介 什麼是 C++? C++ 是一種跨平臺的編程語言,可用於創建高性能應用程式。 C++ 是由 Bjarne Stroustrup 開發的,作為 C 語言的擴展。 C++ 為程式員提供了對系統資源和記憶體的高級控制。 該語言在 2011 年、2014 年、2017 年和 2020 年進行了 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...