當前位置:網站首頁>面試題 01.05. 一次編輯 / 劍指 Offer II 041. 滑動窗口的平均值
面試題 01.05. 一次編輯 / 劍指 Offer II 041. 滑動窗口的平均值
2022-05-14 02:53:52【彼淇梁】
面試題 01.05. 一次編輯 【中等題】【每日一題】
思路:【雙指針模擬】【注解三葉】
假如一次編輯就能讓兩個字符串相等,那麼除了這個編輯比特置外的其餘字符,應該對應比特置是相等的。因此,字符串長度大於
1
的肯定不可能通過一次編輯實現字符串相等,直接排除。
如果first
長度大於second
,就將兩個傳入參數比特置調換,確保第一個字符串first長度 <= second長度
。
通過指針i
錶示字符串first
的字符,通過指針j
錶示字符串second
的字符,同時遍曆兩個字符串,當i
比特置字符和j
比特置字符相等時,i
和j
同時右移判斷下一個比特置字符;否則,如果first
長度和second
長度相等,說明first
和second
如果想成功一次編輯相等,則除了這個比特置之後,再不能出現字符不等的情况,於是i
和j
同時右移,且cnt++
(cnt
為异常比特置數量),如果first
和second
長度不等,那麼從i
比特置(包括i
)往後,必須跟j
比特置(不包括j
)往後字符全部相等,即這裏只有j
右移1
比特,cnt++
。
代碼:
class Solution {
public boolean oneEditAway(String first, String second) {
int n1 = first.length(),n2 = second.length();
//如果兩個字符串長度差大於1,則必不可能通過一次編輯使兩個字符串相等
if (Math.abs(n1-n2)>1){
return false;
}
//保持函數的第一個參數為長度較短的字符串
if (n1 > n2){
return oneEditAway(second,first);
}
//定義第一個字符串指針 i ,第二個字符串指針 j ,异常字符數量 cnt (初值為0)
int i = 0,j = 0,cnt = 0;
//終止條件為 first 遍曆結束 或者 second 遍曆結束 或者 异常字符數量 大於 1 三者滿足任意一個,循環都將終止
while (i < n1 && j < n2 && cnt <= 1){
//同時遍曆兩個字符串,求出當前比特置的字符 c1 c2
char c1 = first.charAt(i),c2 = second.charAt(j);
//如果 c1 == c2 說明當前比特置first和second字符相同,繼續遍曆兩個字符串的下一個比特置
if (c1 == c2){
i++;
j++;
}else {
//如果 c1 != c2,說明當前比特置出現异常
//如果兩個字符串長度相同,那麼我們想維持一次編輯就能成功,必須默認後邊不可能再出現异常,於是i指針和j指針必須同時右移
if (n1 == n2){
i++;
j++;
//异常字符數量+1
cnt++;
}else {
//如果兩個字符串長度不等,那麼較長單詞當前比特置可以允許一次失誤,但較短單詞這個比特置不能出現失誤,因此j指針右移,i指針不動
j++;
//异常字符數量+1
cnt++;
}
}
}
//當循環結束後,如果此時异常字符數量小於等於1,那麼說明我們可以通過一次編輯的方式實現兩個字符串相同
return cnt <= 1;
}
}
劍指 Offer II 041. 滑動窗口的平均值【簡單題】
思路;【隊列】
定義一個隊列來存儲進入滑動窗口的值,每執行依次
next
,就將傳入的元素值加入隊列,並將值累加進sum
,當隊列中元素個數大於滑動窗口長度時,將隊列左端元素移除,並在sum
中减掉隊列左端的元素值,next
返回sum / 隊列中元素個數
,用cnt
來統計隊列中的元素個數。
代碼:
class MovingAverage {
int size;
int sum;
Deque<Integer> deque;
int cnt;
/** Initialize your data structure here. */
public MovingAverage(int size) {
this.deque = new ArrayDeque<>();
this.size = size;
this.sum = 0;
this.cnt = 0;
}
public double next(int val) {
deque.offer(val);
sum += val;
cnt++;
if(cnt > size){
sum -= deque.removeFirst();
}
return (double) sum / (Math.min(cnt, size));
}
}
/** * Your MovingAverage object will be instantiated and called as such: * MovingAverage obj = new MovingAverage(size); * double param_1 = obj.next(val); */
版權聲明
本文為[彼淇梁]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/134/202205140253042952.html
邊欄推薦
猜你喜歡
隨機推薦
- 在VyOS上實現DMVPN&OSPF&BFD·3·配置
- Source Insight 4.0工具查看.S文件
- mysql 中sql 語句查詢今天、昨天、7天、近30天、本月、上一月 數據
- STM32F103C8T6最小系統原理圖和PCB
- ES6新增語法(七)——async
- 【組隊學習】【37期】組隊學習內容詳情
- 文盤Rust——領域交互模式如何實現
- 旅遊評點項目
- 【GPU加速】開發低延遲代碼性能提昇76.33%——通過VS2017創建CUDA項目對比CPU代碼和GPU代碼的延遲(親測代碼可運行簡單可運行適合入手)
- OpenStack基於Libvirt的虛擬化平臺調度實現----Nova虛擬機啟動源碼實現(4)
- Labelme標注Json文件轉XML(能識別矩形框)
- C語言和go語言之間的交互 - C語言中使用go語言,使用的go語言又使用了c語言
- GeoServer源碼解讀 - 入參處理
- LeetCode|3. 無重複字符的最長子串
- 2022.5.13-----leetcode.面試01.05
- im即時通訊開發:IM群聊消息的已讀回執功能
- 初識MQ-01
- 練習29,統計子矩陣【二比特前綴和/雙指針】
- MnO2-PEDT 二氧化錳納米球修飾聚乙烯二氧噻吩/MnO2-P4VP 二氧化錳納米顆粒修飾聚-4-乙烯吡啶
- 量子計算中的么正操作符和幹涉現象
- 【服務器數據恢複】硬盤壞道和不穩定扇區導致服務器崩潰的數據恢複案例
- 性能測試報告編寫技巧
- ASP.NET對Cookie的操作方法有哪些
- SAP UI5 應用開發教程之八十七 - 如何讓 SAP UI5 Mock 服務器支持自定義 url 參數試讀版
- Redis基礎之溫故
- 神經網絡中的反向傳播&&參數更新
- 深度學習基礎知識點(一)CNN卷積神經網絡——1.卷積方面的原理
- 從PlatEMO中提取真實PF前沿
- G020-OP-INS-RHEL-02 RedHat OpenStack 發放雲主機(命令行)
- 解决報錯: AttributeError: module ‘distutils‘ has no attribute ‘version‘,親測有效
- 一文了解字節跳動如何解决 SLA 治理難題
- openstack底層提取所有虛擬機IP和其uuid、openstack底層提取所有虛擬機的所在宿主機
- 安裝mysql-community-server報錯缺少libaio依賴
- gin框架疑問, 為什麼不使用 *RouterGroup
- Redis分頁
- 【數據庫系統工程師】6.4數據倉庫和數據挖掘基礎知識
- PyTorch分類識別例子
- npx hardhat verify YOUR_CONTRACT_ADDRESS --network rinkeby
- 番外篇-穀粒商城的數據庫錶結構設計SQL語句
- 19. 删除鏈錶的倒數第 N 個結點