刷題(day01)

1、leetcode485.最大連續1的個數

給定一個二進制數組?nums?, 計算其中最大連續?1?的個數。

示例 1:

輸入:nums = [1,1,0,1,1,1]
輸出:3
解釋:開頭的兩位和最后的三位都是連續 1 ,所以最大連續 1 的個數是 3.

示例 2:

輸入:nums = [1,0,1,1,0,1]
輸出:2

提示:

  • 1 <= nums.length <= 10^5
  • nums[i]?不是?0?就是?1.

① 常規思路:遍歷數組,記錄連續1的個數,比較是否是當前最大個數。

public class Solution {public int findMaxConsecutiveOnes(int[] nums) {int count = 0;int result = 0;for (int i = 0; i < nums.length; i++) {if(nums[i] == 1){count ++;}else{result = Math.max(count,result);count = 0;}result = Math.max(count,result);}return result;}
}

② 滑動窗口思路:

當輸出或比較的結果在原數據結構中是連續排列的時候,可以使用滑動窗口算法求解。

將兩個指針比作一個窗口,通過移動指針的位置改變窗口的大小,觀察窗口中的元素是否符合題意。

  1. 初始窗口中只有數組開頭一個元素。
  2. 當窗口中所有元素為1時,右指針向右移動,擴大窗口。
  3. 當窗口中存在 0 時,計算連續序列長度,左指針指向右指針。
public class Solution {public int findMaxConsecutiveOnes(int[] nums){int length = nums.length;int left = 0;int right = 0;int maxSize = 0;while(right < length){//當滑動窗口所有元素為 1 時,右指針向右移,擴大窗口if(nums[right++] == 0){//當窗口中存在 0 時,計算連續序列長度,左指針指向右指針maxSize = Math.max(maxSize,right - left - 1);left = right;}}//因為最后一連續序列在循環中無法比較,所以在循壞外進行比較return Math.max(maxSize,right - left);}
}

?2、leetcode26.刪除有序數組中的重復項

給你一個?非嚴格遞增排列?的數組?nums?,請你?原地?刪除重復出現的元素,使每個元素?只出現一次?,返回刪除后數組的新長度。元素的?相對順序?應該保持?一致?。然后返回?nums?中唯一元素的個數。

考慮?nums?的唯一元素的數量為?k?,你需要做以下事情確保你的題解可以被通過:

  • 更改數組?nums?,使?nums?的前?k?個元素包含唯一元素,并按照它們最初在?nums?中出現的順序排列。nums?的其余元素與?nums?的大小不重要。
  • 返回?k?。

判題標準:

系統會用下面的代碼來測試你的題解:

int[] nums = [...]; // 輸入數組
int[] expectedNums = [...]; // 長度正確的期望答案
int k = removeDuplicates(nums); // 調用
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i];
}

如果所有斷言都通過,那么您的題解將被?通過

示例 1:

輸入:nums = [1,1,2]
輸出:2, nums = [1,2,_]
解釋:函數應該返回新的長度 2 ,并且原數組 nums 的前兩個元素被修改為 1, 2 。
不需要考慮數組中超出新長度后面的元素。

示例 2:

輸入:nums = [0,0,1,1,1,2,2,3,3,4]
輸出:5, nums = [0,1,2,3,4]
解釋:函數應該返回新的長度 5, 并且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。不需要考慮數組中超出新長度后面的元素。

提示:

  • 1 <= nums.length <= 3 * 10^4
  • -10^4?<= nums[i] <= 10^4
  • nums?已按?非嚴格遞增?排列

① 解題思路:雙指針

首先注意數組是有序的,那么重復的元素一定會相鄰,要求刪除重復,實際上就是將不重復的元素移到數組的左側。考慮用到 2 個指針,一個在前記作 i,一個在后記作 j。

比較 i 和 j 位置的元素是否相等,如果相等,i 后移 1 位,如果不相等,將 i 位置的元素復制到 j + 1 位置上,j 后移 1 位,i 后移 1 位重復上述過程,知道 i 等于數組長度。返回 j + 1,即為新數組長度。

class Solution {public int removeDuplicates(int[] nums) {if(nums == null || nums.length == 0) return 0;int n = nums.length;int j = 0;for(int i = 0;i < n;i ++){if(nums[i] != nums[j]){nums[++j] = nums[i];}}return j + 1;}
}

3、leetcode283.移動零

給定一個數組?nums,編寫一個函數將所有?0?移動到數組的末尾,同時保持非零元素的相對順序。

請注意?,必須在不復制數組的情況下原地對數組進行操作。

示例 1:

輸入: nums = [0,1,0,3,12]輸出: [1,3,12,0,0]示例 2:
輸入: nums = [0]輸出: [0]

提示:

  • 1 <= nums.length <= 10^4
  • -231?<= nums[i] <= 231?- 1?

① 兩次遍歷

思路:我們創建兩個指針 i 和 j,第一次遍歷的時候指針 j 用來記錄當前有多少 非0 元素。即遍歷的時候每遇到一個 非0 元素就將其往數組左邊挪,每一次遍歷完后,j 指針的下標就指向了最后一個 非0 元素下標。第二次遍歷的時候,起始位置就從 j 開始到結束,將剩下的這段區域內的元素全部置為0。

class Solution {public void moveZeroes(int[] nums) {if(nums==null) return;//第一次遍歷的時候,j指針記錄非0的個數,只要是非0的統統都賦給nums[j]int j = 0;for(int i=0;i<nums.length;++i) {if(nums[i]!=0) {nums[j++] = nums[i];}}//非0元素統計完了,剩下的都是0了//所以第二次遍歷把末尾的元素都賦為0即可for(int i=j;i<nums.length;++i) {nums[i] = 0;}}
}

②一次遍歷

如下所示,我們可以將 j 移動到自身右側第一個元素為 0 的位置,將 i?移動到 j?右側第一個元素非 0 的位置,然后交換元素。

?然后再執行上一步驟,循環下去,直至 i 抵達邊界。

class Solution {public void moveZeroes(int[] nums) {if(nums==null) {return;}//兩個指針i和jint j = 0;for(int i=0;i<nums.length;i++) {//當前元素!=0,就把其交換到左邊,等于0的交換到右邊if(nums[i]!=0) {int tmp = nums[i];nums[i] = nums[j];nums[j++] = tmp;}}}
}	

4、leetcode27.移除元素

給你一個數組?nums?和一個值?val,你需要?原地?移除所有數值等于?val?的元素。元素的順序可能發生改變。然后返回?nums?中與?val?不同的元素的數量。

假設?nums?中不等于?val?的元素數量為?k,要通過此題,您需要執行以下操作:

  • 更改?nums?數組,使?nums?的前?k?個元素包含不等于?val?的元素。nums?的其余元素和?nums?的大小并不重要。
  • 返回?k

用戶評測:

評測機將使用以下代碼測試您的解決方案:

int[] nums = [...]; // 輸入數組
int val = ...; // 要移除的值
int[] expectedNums = [...]; // 長度正確的預期答案。// 它以不等于 val 的值排序。int k = removeElement(nums, val); // 調用你的實現assert k == expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 個元素
for (int i = 0; i < actualLength; i++) {assert nums[i] == expectedNums[i];
}

如果所有的斷言都通過,你的解決方案將會?通過

示例 1:

輸入:nums = [3,2,2,3], val = 3
輸出:2, nums = [2,2,_,_]
解釋:你的函數函數應該返回 k = 2, 并且 nums 中的前兩個元素均為 2。
你在返回的 k 個元素之外留下了什么并不重要(因此它們并不計入評測)。

示例 2:

輸入:nums = [0,1,2,2,3,0,4,2], val = 2
輸出:5, nums = [0,1,4,0,3,_,_,_]
解釋:你的函數應該返回 k = 5,并且 nums 中的前五個元素為 0,0,1,3,4。
注意這五個元素可以任意順序返回。
你在返回的 k 個元素之外留下了什么并不重要(因此它們并不計入評測)。

提示:

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

?① 拷貝覆蓋

思路:遍歷數組 nums,在遍歷過程中如果出現數字與需要移除的值不相同時,則進行拷貝覆蓋,如果相同的時候,則跳過該數字不進行拷貝覆蓋,最后 j 即為新的數組長度

這種思路在移除元素較多時更適合使用,最極端的情況是全部元素需要移除,遍歷一遍結束即可。

class Solution {public int removeElement(int[] nums, int val) {int j = 0;for(int i = 0;i < nums.length;i ++) {if(nums[i] != val) {nums[j ++] = nums[i];}}return j;}
}

② 交換移除

思路:遍歷數組 nums,在遍歷過程中如果出現數字與需要移除的值不相同時,則 i 自增 1,繼續下一次遍歷,如果相同的時候,則將 nums[i] 與 nums[ans - 1] 交換,即當前數字和數組最后一個數字進行交換,交換后就少了一個元素,故而 ans 自減 1

這種思路在移除元素較少時更適合使用,最極端的情況是沒有元素需要移除,遍歷一遍結束即可。

class Solution {public int removeElement(int[] nums, int val) {int j = nums.length;for (int i = 0; i < nums.length;) {if (nums[i] == val) {nums[i] = nums[-- j];             } else {i++;}}return j;}
}

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

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

相關文章

Nginx 高效加速策略:動靜分離與緩存詳解

在現代Web開發中&#xff0c;網站性能是衡量用戶體驗的關鍵指標之一。Nginx&#xff0c;以其出色的性能和靈活性&#xff0c;成為眾多網站架構中不可或缺的一部分。本文將深度解析如何利用Nginx實現動靜分離與緩存&#xff0c;從而大幅提升網站加載速度和響應效率。 理解動靜分…

昇思第18天打卡|ShuffleNet圖像分類

ShuffleNet網絡介紹 ShuffleNetV1是曠視科技提出的一種計算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一樣主要應用在移動端&#xff0c;所以模型的設計目標就是利用有限的計算資源來達到最好的模型精度。ShuffleNetV1的設計核心是引入了兩種操作&#xff1a;Pointw…

張大哥筆記:你一旦開竅,就會發現遍地都是錢

大家有沒有發現&#xff0c;窮人總是追逐眼前的利益&#xff0c;總是在追著錢跑&#xff0c;卻總是賺不到錢。而富人有著長遠的見識&#xff0c;追著問題跑&#xff0c;最后卻賺的盆滿缽滿。 我們聽過這樣一句話&#xff0c;錢不是賺來的&#xff0c;而是幫助別人解決問題后給你…

【計算機】同步/異步

同步/異步 在計算機科學和編程中&#xff0c;“同步”&#xff08;Synchronization&#xff09;是一種機制&#xff0c;用于協調不同進程或線程之間的操作&#xff0c;以避免競態條件&#xff08;race conditions&#xff09;、死鎖&#xff08;deadlocks&#xff09;和其他并…

Qt/C++編寫地圖應用/離線地圖下載/路徑規劃/軌跡回放/海量點/坐標轉換

一、前言說明 這個地圖組件寫了很多年了&#xff0c;最初設計的比較粗糙&#xff0c;最開始只是為了滿足項目需要&#xff0c;并沒有考慮太多拓展性&#xff0c;比如最初都是按照百度地圖寫死在代碼中&#xff0c;經過這幾年大量的現場實際應用&#xff0c;以及大量的用戶提出…

Django 新增數據 save()方法

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

BFC 是什么?

BFC 是塊級格式化上下文&#xff08;Block Formatting Context&#xff09;的縮寫&#xff0c;是 CSS 中一個重要的概念&#xff0c;用于控制塊級盒子的布局及浮動元素的交互。BFC 是一個獨立的渲染區域&#xff0c;內部的塊級盒子會按照特定的規則進行布局&#xff0c;不會影響…

軟件工程(上)

目錄 軟件過程模型&#xff08;軟件開發模型&#xff09; 瀑布模型 原型模型 V模型 構件組裝模型 螺旋模型&#xff08;原型瀑布&#xff09; 基于構件的軟件工程&#xff08;CBSE&#xff09; 快速應用開發模型&#xff08;RAD&#xff09; 統一過程&#xff08;UP&a…

Linux學習看這一篇就夠了,超超超牛的Linux基礎入門

引言 小伙伴們&#xff0c;不管是學習c還是學習其他語言在我們學的路上都繞不過操作系統&#xff0c;而且&#xff0c;老生常談的Linux更是每個計算機人的必修&#xff0c;那么我們對Linux的了解可能只是從別人那聽到的簡單的這個系統很牛&#xff0c;巴拉巴拉的&#xff0c;但…

大模型日報 2024-07-08

大模型日報 2024-07-08 大模型資訊 Anthropic CEO&#xff1a;大模型訓練成本暴漲&#xff0c;2027年將達1000億美元&#xff01; Anthropic首席執行官表示&#xff0c;當前AI模型訓練成本是10億美元&#xff0c;未來三年&#xff0c;這個數字可能會上升到100億美元甚至1000億美…

GitLab管理員常用配置及設置匯總

? 之前在 虛擬機Ubuntu 22.04上搭建GitLab操作步驟 上介紹了在Ubuntu 22.04上如何搭建社區版的GitLab&#xff0c;這里整理下作為GitLab管理員時在搭建完GitLab CE后&#xff0c;如何對其進行配置或設置 更改倉庫存儲位置&#xff1a;切換到root用戶下操作 默認存放位置&…

SSL 證書

自動獲取 Lets Encrypt 免費證書 &#xff08;適用于 Linux 系統&#xff09; 安裝 Certbot sudo apt-get update sudo apt-get install certbot python3-certbot-nginx # Nginx 服務器 sudo apt-get install certbot python3-certbot-apache # Apache 服務器 獲取和安裝證…

小米rdemi紅米ax3000t刷機 20240707最新配套完整程序整理合集

小米rdemi紅米ax3000t刷機程序地址&#xff1a; https://www.123pan.com/s/LA1bVv-EOzVv.html 小米路由器SSH密碼計算器 https://www.1234f.com/fuwu/ax3000t/ 最新更新地址&#xff1a;https://www.1234f.com/fuwu/openwrt/ 依次輸入如下命令&#xff1a; curl -X POST h…

Leetcode 295.數據流的中位數

295.數據流的中位數 問題描述 中位數是有序整數列表中的中間值。如果列表的大小是偶數&#xff0c;則沒有中間值&#xff0c;中位數是兩個中間值的平均值。 例如 arr [2,3,4] 的中位數是 3 。例如 arr [2,3] 的中位數是 (2 3) / 2 2.5 。 實現 MedianFinder 類: Media…

算法013:水果成籃

水果成籃. - 備戰技術面試&#xff1f;力扣提供海量技術面試資源&#xff0c;幫助你高效提升編程技能,輕松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/fruit-into-baskets/ 這道題題目很長&#xff0c;仔細閱讀過后&#xff0c;我們其實可以簡化成&#xff…

MySQL 9.0新特性:向量存儲

MySQL 9.0 正式版已經發布&#xff0c;其中一個亮點就是向量&#xff08;VECTOR&#xff09;數據類型的支持&#xff0c;本文給大家詳細介紹一下這個新功能。 向量類型 MySQL 9.0 增加了一個新的向量數據類型&#xff1a;VECTOR。它是一種可以存儲 N 個數據項的數據結構&…

Redis Stream:實時數據流的處理與存儲

Redis Stream:實時數據流的處理與存儲 引言 在當今數據驅動的世界中,實時數據處理和存儲成為了許多應用的核心需求。Redis Stream作為一種新興的數據結構,為Redis帶來了強大的流處理能力。本文將深入探討Redis Stream的特點、使用場景以及如何高效地利用它來處理實時數據流…

聚焦數字創新,定義影像未來

國際數字影像產業園在明確產業定位與發展方向時&#xff0c;應聚焦于數字影像、文創、媒體等新興產業領域&#xff0c;以技術創新為核心動力、產業升級為保障、市場拓展為途徑、國際化發展為方向&#xff0c;推動園區的持續健康發展。 作為園區的核心產業&#xff0c;數字影像產…

python socks5代理的使用

需要安裝依賴 1、解決方法1 In order to make requests use socks proxy, you need to install it with it’s dependency. pip install requests[socks]2、解決方法2 pip install PySocks