【每日刷題】數組-LC56、LC238、隨想錄1、LC560

1. LC56 合并區間

題目鏈接

  1. Arrays.sort先讓intervals里的子數組按照子數組的第一個數字值從小到大排列。
  2. 開一個新數組,newInterval,存放合并好的子數組
  3. 讓intervals的當前子數組i的第一個數字與newInterval的當前子數組index的最后一個數字比較大小:如果區間沒有重疊,則interval的i加入newInterval; 如果重疊,則與newInterval的區間合并
  4. 注意合并時,并不是newInterval[index][1] = intervals[i][1];
    而是newInterval[index][1] = Math.max(newInterval[index][1], intervals[i][1]);
    因為有可能是這種情況:[1,6],[2,4]——這種情況合并還是[1,6]。
    在這里插入圖片描述

秒懂力扣區間題目:重疊區間、合并區間、插入區間

class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);int[][] newInterval = new int[intervals.length][2];newInterval[0] = intervals[0];int index = 0;for (int i=1; i<intervals.length; i++){if (intervals[i][0] > newInterval[index][1]){index++;newInterval[index] = intervals[i];}else{newInterval[index][1] = Math.max(newInterval[index][1], intervals[i][1]);}}return Arrays.copyOf(newInterval, index+1);}
}

2. LC238除自身以外數組的乘積

題目鏈接
在這里插入圖片描述

class Solution {public int[] productExceptSelf(int[] nums) {int[] left = new int[nums.length];int[] right = new int[nums.length];//leftleft[0] = 1;for (int i=1; i<left.length; i++){left[i] = left[i-1] * nums[i-1];}//rightright[right.length-1] = 1;for (int i=right.length-2; i>=0; i--){right[i] = right[i+1] * nums[i+1];}//合并int[] result = new int[nums.length];for (int i=0; i<nums.length; i++){result[i] = left[i] * right[i];}return result;}
}

3.隨想錄1、二分查找

題目鏈接

最重要的是確定左閉右閉區間,所以while條件是<=。因為左閉右閉就是左邊區間也包括,右邊區間也包括,所以左右區間可以=。如果是開區間,一個區間不包括,一個區間包括,那么兩個區間必不能相等。

代碼

class Solution {public int search(int[] nums, int target) {int left = 0;int right = nums.length-1;// 避免當 target 小于nums[0] nums[nums.length - 1]時多次循環運算if (target < nums[0] || target > nums[nums.length - 1]) {return -1;}while(left <= right){int mid = (right+left)/2;if (nums[mid] == target){return mid;}else if (nums[mid] > target){right = mid - 1;}else if (nums[mid] < target){left = mid + 1;}}return -1;}
}

4. LC560 和為k的子數組

題目鏈接

解法一:
暴力算法
易錯:在外層循環時,nums[i] == k了之后不要continue,還有繼續內循環。因為可能會有這種情況:滿足和為k之后,后面出現了1和-1。此時相加和依然為k。

class Solution {public int subarraySum(int[] nums, int k) {int sum = 0;int count = 0;for (int i=0; i<nums.length; i++){sum = nums[i];if (nums[i] == k){count++;}for (int j=i+1; j<nums.length; j++){sum += nums[j];if (sum == k){count++;}}}return count;}
}

解法二:
前綴和

假設數組的前綴和數組為prefixSum,其中prefixSum[i]表示從數組起始位置到第i個位置的元素之和。

對于任意的兩個下標i和j(i < j),如果prefixSum[j] - prefixSum[i] = k,即從第i個位置到第j個位置的元素之和等于k,那么說明從第i+1個位置到第j個位置的連續子數組的和為k。

遍歷數組,計算每個位置的前綴和,并使用一個哈希表來存儲每個前綴和出現的次數。在遍歷的過程中,檢查是否存在prefixSum[j] - k的前綴和,如果存在,說明從某個位置到當前位置的連續子數組的和為k,將對應的次數累加到結果中。

這樣,通過遍歷一次數組,統計出和為k的連續子數組的個數,并且時間復雜度為O(n),其中n為數組的長度。

class Solution {public int subarraySum(int[] nums, int k) {int preSum = 0;int count = 0;Map<Integer, Integer> map = new HashMap<>();map.put(0,1); // 初始化前綴和為0的次數為1for (int i=0; i<nums.length; i++){preSum += nums[i];if (map.containsKey(preSum-k)){count += map.get(preSum-k);}if (map.containsKey(preSum)){map.put(preSum, map.get(preSum)+1);}else{map.put(preSum, 1);}}return count;}
}

!!為什么要初始化前綴和?
如果從數組的開始位置到當前位置的子數組的和恰好等于 k,那么這個子數組的前綴和就是 0,即 sum - k 等于 0。因此,需要初始化一個前綴和為 0 的次數為 1,表示從數組的開始位置到當前位置的子數組的和為 k 的情況。如果不初始化,那么這種情況會被漏掉,導致結果不正確。

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

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

相關文章

ARM 架構下國密算法庫

目錄 前言GmSSL編譯環境準備下載 GmSSL 源碼編譯 GmSSL 源碼SM4 對稱加密算法SM2 非對稱加密算法小結前言 在當前的國際形式下,國替勢不可擋。操作系統上,銀河麒麟、統信 UOS、鴻蒙 OS 等國產系統開始發力,而 CPU 市場,也是百花齊放,有 龍芯(LoongArch架構)、兆芯(X86…

Intel/國產化無人叉車機器視覺專用控制器

無人叉車和機器視覺是兩個獨立的技術領域&#xff0c;但它們可以結合使用以實現更高效的物流自動化。無人叉車是一種自動化運輸工具&#xff0c;可以在沒有人為干預的情況下完成貨物的搬運和運輸。機器視覺是一種人工智能技術&#xff0c;可以讓計算機識別和理解圖像或視頻中的…

YOLO:實時目標檢測的革命

目標檢測作為計算機視覺領域的一個核心任務&#xff0c;一直以來都是研究的熱點。而YOLO&#xff08;You Only Look Once&#xff09;技術作為其中的杰出代表&#xff0c;以其獨特的處理方式和卓越的性能&#xff0c;成為了實時目標檢測的標桿。本文將探討YOLO技術的核心原理、…

FPGA時序約束與分析--建立時間與保持時間

文章目錄 前言一、定義二、舉例說明2.1 建立時間違規2.2 保持時間違規前言 時序約束的定義–設計者根據實際的系統功能,通過時序約束的方式提出時序要求; FPGA 編譯工具根據設計者的時序要求,進行布局布線;編譯完成后, FPGA 編譯工具還需要針對布局布線的結果,套用特定的…

【C++】每日一題,189 輪轉數組

給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉 3 步: [5,6,7,1,2,3,…

搜索回溯算法(DFS)1------遞歸

目錄 簡介&#xff1a; 遞歸問題解題的思路模板 例題1&#xff1a;漢諾塔 例題2&#xff1a;合并兩個有序鏈表 例題3&#xff1a;反轉鏈表 例題4&#xff1a;兩兩交換鏈表中的節點 例題5&#xff1a;Pow&#xff08;x,n&#xff09;-快速冪 結語&#xff1a; 簡介&…

嵌入式驅動學習第二周——斷言機制

前言 這篇博客來聊一聊C/C的斷言機制。 嵌入式驅動學習專欄將詳細記錄博主學習驅動的詳細過程&#xff0c;未來預計四個月將高強度更新本專欄&#xff0c;喜歡的可以關注本博主并訂閱本專欄&#xff0c;一起討論一起學習。現在關注就是老粉啦&#xff01; 目錄 前言1. 斷言介紹…

貪心 Leetcode 134 加油站

加油站 Leetcode 134 學習記錄自代碼隨想錄 在一條環路上有 n 個加油站&#xff0c;其中第 i 個加油站有汽油 gas[i] 升 你有一輛油箱容量無限的的汽車&#xff0c;從第 i 個加油站開往第 i1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發&#xff0c;開始時油…

串聯所有單詞的子串

題目鏈接 串聯所有單詞的子串 題目描述 注意點 words[i] 和 s 由小寫英文字母組成1 < words.length < 5000可以以 任意順序 返回答案words中所有字符串長度相同 解答思路 根據滑動窗口哈希表解決本題&#xff0c;哈希表存儲words中所有的單詞及單詞的出現次數&#…

Reactor詳解

目錄 1、快速上手 介紹 2、響應式編程 2.1. 阻塞是對資源的浪費 2.2. 異步可以解決問題嗎&#xff1f; 2.3.1. 可編排性與可讀性 2.3.2. 就像裝配流水線 2.3.3. 操作符&#xff08;Operators&#xff09; 2.3.4. subscribe() 之前什么都不會發生 2.3.5. 背壓 2.3.6. …

p18 線性代數,行階梯型矩陣

行階梯型矩陣 行最簡型矩陣

steam游戲搬磚,跨國信息差項目,每天1小時收益也很不錯

大家好&#xff0c;我是阿陽&#xff01;每天都是一個新的開始&#xff01; 今天看到個Steam游戲搬磚項目&#xff0c;還是跨國國際貿易&#xff0c;感覺很好玩&#xff0c;特來給大家分享。 原理簡介 就是把Steam上的游戲裝備&#xff0c;搬運到國內網易Buff平臺上來賣。目前…

算法沉淀——動態規劃之01背包問題(leetcode真題剖析)

算法沉淀——動態規劃之01背包問題 01.【模板】01背包02.分割等和子集03.目標和04.最后一塊石頭的重量 II 01背包問題是一類經典的動態規劃問題&#xff0c;通常描述為&#xff1a;有一個固定容量的背包&#xff0c;以及一組物品&#xff0c;每件物品都有重量和價值&#xff0c…

c++基礎學習第二天(數組,函數)

提示&#xff1a;c基礎學習第二天&#xff08;數組&#xff0c;函數&#xff09; 文章目錄 1、數組1.1、 概述1.2、一維數組1.2.1、一維數組定義方式1.2.2、一維數組名稱的用途. 1.3、 二維數組1.3.1、二維數組定義方式1.3.2、二維數組數組名的用途 2、函數2.1、概述2.2、函數的…

云計算 2月28號 (linux的磁盤分區)

一 存儲管理 主要知識點: 基本分區、邏輯卷LVM、EXT3/4/XFS文件系統、RAID 初識硬盤 機械 HDD 固態 SSD SSD的優勢 SSD采用電子存儲介質進行數據存儲和讀取的一種技術&#xff0c;擁有極高的存儲性能&#xff0c;被認為是存儲技術發展的未來新星。 與傳統硬盤相比&#xff0c…

Vue 3 中的 Composition API 詳解

Vue.js&#xff0c;作為前端領域流行的框架之一&#xff0c;以其響應式數據綁定和組件化開發贏得了廣大開發者的喜愛。隨著前端技術的不斷發展和項目復雜度的增加&#xff0c;Vue 團隊推出了 Vue 3&#xff0c;并引入了 Composition API&#xff0c;以更好地滿足復雜應用的需求…

深度偽造,讓網絡釣魚更加難以辨別

網絡釣魚一直是安全領域的一個突出話題&#xff0c;盡管這類詐騙形式已經存在了幾十年&#xff0c;依舊是欺詐攻擊或滲透組織的最有效方法之一。詐騙分子基于社會工程原理&#xff0c;通過郵件、網站以及電話、短信和社交媒體&#xff0c;利用人性&#xff08;如沖動、不滿、好…

嵌入式驅動學習第二周——Linux內核打印

前言 這篇博客來聊一聊Linux內核打印。 嵌入式驅動學習專欄將詳細記錄博主學習驅動的詳細過程&#xff0c;未來預計四個月將高強度更新本專欄&#xff0c;喜歡的可以關注本博主并訂閱本專欄&#xff0c;一起討論一起學習。現在關注就是老粉啦&#xff01; 目錄 前言1. dmesg指令…

react diff

react diff算法為降低算法復雜度提出了三大策略&#xff1a; 1.只進行同級比較 2.節點類型比較&#xff0c;不同元素生成不同的fiber樹 3.key作為元素的唯一標識 diff算法流程 diff算法需要進行兩輪遍歷&#xff1a; 第一輪遍歷更新的節點。 第二輪遍歷沒更新的節點。 第一輪…

【LeetCode:225. 用隊列實現棧 + 棧 | 隊列】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…