【劍指offer】搜索算法

目錄

📁?JZ53?數字在升序數組中出現的次數?編輯

📁?JZ4?二維數組中的查找?編輯

📁?JZ11?旋轉數組的最小數字

📁?JZ38?字符串的排列?編輯


📁?JZ53?數字在升序數組中出現的次數

? ? ? ? 這就是一道簡單的模板題,使用二分查找的模板往上套即可。如果對二分還不是很熟悉的,可以看一下我寫的這一篇文章,講解的還是比較基礎簡單的:【算法雜貨鋪】二分算法_二分樸素-CSDN博客

#include <limits>
class Solution {
public:int GetNumberOfK(vector<int>& nums, int k) {if(nums.size() == 0)return 0;int left = 0, right = nums.size() - 1;int begin = -1 , end = -1;while(left < right){int mid = (left + right) >> 1;if(nums[mid] < k)left = mid + 1;elseright = mid;}if(nums[left] == k)begin = left;if(begin == -1)return 0;left = 0, right = nums.size() - 1;while(left < right){int mid = (left + right + 1) >> 1;if(nums[mid] > k)right = mid - 1;elseleft = mid;}if(nums[left] == k)end = left;return end - begin + 1;}
};

📁?JZ4?二維數組中的查找

? ? ? ? 根據這個二維數組的性質,搜索目標數。

????????"每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。"

? ? ? ? 我們從左上角開始,面臨如下幾種情況:

1. target == 當前位置:直接返回true.

2.?target >?當前位置:說明比當前行中的所有元素都要大,直接去下一行查找.

3.?target <?當前位置:說明當前行可能存在目標元素,去前面的位置查找。因為列是從小到大向下遞增的,如果當前行沒有,要去下一行查找(?target >?當前位置),在下一行中可以直接從當前行的列位置開始。

? ? ? ? 行和列必須在指定范圍內。

class Solution {
public:bool Find(int target, vector<vector<int> >& array) {int m = array.size(), n = array[0].size();if(m == 0 || n == 0)return false;int row = 0, col = n - 1;while(row < m && col >= 0){if(array[row][col] == target)return true;else if(array[row][col] > target)col--;else++row;}return false;}
};

📁?JZ11?旋轉數組的最小數字

? ? ? ? 旋轉數組后,無非就下面這幾種情況:

? ? ? ? 將一個有序的數組分成一個或兩個有序的數組。

1. mid > right:說明最小節點一定在mid的右側.

2. mid == right: 不確定,逐漸縮小右邊界范圍.

3. mid < right: 最小節點一定在mid的左側.

class Solution {
public:int minNumberInRotateArray(vector<int>& nums) {int l = 0, r = nums.size() - 1;while(l < r){int mid = (l + r) >> 1;if(nums[mid] > nums[r])l = mid + 1;else if(nums[mid] == nums[r])--r;elser = mid;}return nums[l];}
};

📁?JZ38?字符串的排列

? ? ? ? 思路就是:將一個字符串str,生成其所有可能的排列(全排列),并返回去重后的結果。

#include <unordered_map>
#include <vector>
class Solution {
public:vector<string> ret;string path;unordered_set<string> s;vector<string> Permutation(string str) {int n = str.size();vector<bool> arr(n + 1 , false);dfs(str, arr);return ret;}void dfs(string str, vector<bool>& arr){if(path.size() == str.size() && s.find(path) == s.end()){ret.push_back(path);s.insert(path);return ;}for(int i = 0 ; i < str.size(); ++i){if(arr[i] == false){arr[i] = true;path += str[i];dfs(str, arr);arr[i] = false;path.pop_back();}}}
};

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

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

相關文章

ETLCloud批流一體化體現在哪

ETLCloud批流一體化體現在哪 企業對數據處理的實時性、高效性和準確性的要求越來越高。批流一體化作為一種先進的數據處理理念&#xff0c;逐漸被企業所采用。 目前許多國產化ETL工具也裝配了十分強大的批流一體化能力&#xff0c;ETLCoud就是一個很好的代表&#xff0c;它能夠…

Mybatis學習之緩存(九)

這里寫目錄標題一、MyBatis的一級緩存1.1、工作原理1.2、一級緩存失效的四種情況1.3、不同的SqlSession對應不同的一級緩存1.4、同一個SqlSession但是查詢條件不同1.5、同一個SqlSession兩次查詢期間執行了任何一次增刪改操作1.6、同一個SqlSession兩次查詢期間手動清空了&…

windows10裝Ubuntu22.04系統(雙系統)

參考鏈接&#xff1a;Windows和Linux雙系統的保姆級安裝教程&#xff0c;新手小白跟著也能裝_windows安裝linux雙系統-CSDN博客 1 前期準備 1.下載Ubuntu22.04.5 的iso鏡像文件&#xff1a;Download Ubuntu Desktop | Ubuntu 2.準備一個U盤&#xff08;空&#xff0c;已有文…

Pandas數據處理與分析實戰:Pandas數據清洗與處理入門

數據清洗&#xff1a;Pandas數據處理入門 學習目標 本課程將引導學員了解數據清洗的基本概念&#xff0c;掌握使用Pandas庫處理數據集中的缺失值、重復數據和異常值的方法&#xff0c;確保數據的質量&#xff0c;為后續的數據分析和機器學習任務打下堅實的基礎。 相關知識點 Pa…

Python爬蟲實戰:研究ScrapyRT框架,構建圖書商城數據采集系統

1. 引言 1.1 研究背景 在當今數字化時代,互聯網已成為全球最大的信息庫,蘊含著海量的有價值數據,涵蓋商業、教育、科研、醫療等各個領域。根據 IDC(國際數據公司)預測,到 2025 年全球數據圈將增長至 175ZB,其中網絡數據占比超過 60%。這些數據不僅是企業制定商業策略、…

springboot接口請求參數校驗

參數校驗 參數校驗可以防止無效或錯誤的數據進入系統。通過校驗前端輸入的參數&#xff0c;可以確保數據的完整性&#xff0c;避免因為缺少必要的信息而導致程序錯誤或異常。例如&#xff0c;對于密碼字段&#xff0c;可以通過校驗規則要求用戶輸入至少8個字符、包含字母和數字…

Docker部署 Neo4j 及集成 APOC 插件:安裝與配置完整指南(docker-compose)

Docker部署 Neo4j 及集成 APOC 插件&#xff1a;分步驟指南 摘要 &#xff1a;本文將分兩部分詳細介紹相關內容。第一部分講解如何使用 Docker Compose 部署 Neo4j 圖數據庫&#xff0c;提供完整配置文件及常見問題解決方案&#xff1b;第二部分在前者基礎上&#xff0c;介紹 A…

TLSv1.2協議與TCP/UDP協議傳輸數據內容差異

一、Wireshark中常見的TLSv1.2在用Wireshark抓包時&#xff0c;除了看到課堂上教過的經典的TCP/UDP協議&#xff0c;還有一個協議經常出現——TLSv1.2。并且這個協議的Info解釋是Application data&#xff0c;其實看到這個解釋&#xff0c;我大概猜出來了TLSv1.2是用來給用戶數…

51c自動駕駛~合集14

自己的原文哦~ https://blog.51cto.com/whaosoft/11707335 #Text2LiDAR 文本引導的無條件點云生成新SOTA 論文題目&#xff1a;《Text2LiDAR: Text-guided LiDAR Point Cloud Generation via Equirectangular Transformer》 論文地址&#xff1a;https://arxiv.o…

k8s基本概念

k8s 的基本概念 Kubernetes是一個可以移植、可擴展的開源平臺&#xff0c;使用 聲明式的配置 并依據配置信息自動地執行容器化應用程序的管理。在所有的容器編排工具中&#xff08;類似的還有 docker swarm / mesos等&#xff09;&#xff0c;Kubernetes的生態系統更大、增長更…

Easysearch 數據遷移之數據比對

上一篇我們通過 INFINI Gateway 進行了索引數據遷移&#xff0c;對索引遷移結果進行了初步且直觀的校驗--對比索引的文檔數是否一致。今天介紹個實實在在的數據比對方法&#xff0c;通過網關對比索引文檔的內容在兩個集群是否一致。話不多說&#xff0c;就拿上次遷移的兩個索引…

Codeforces Round 1042 (Div. 3)

ABCD 略E注意到每個操作最多執行一次&#xff0c;ifa[i]!b[i]&#xff0c;要么a[i]^a[i1]要么a[i]^b[i1]G設消除1~i的數的操作次數為f[i]&#xff0c;可以推出f[i]2*f[i-1]1&#xff0c;那么消除1~i的數的分數乘的數為g[i]&#xff0c;g[i]g[i-1]*g[i-1]*i s雖然很大&#xff0…

AJAX:讓你的網頁“靜悄悄”變聰明,體驗絲滑升級

大家好&#xff0c;今天想聊聊一個讓網頁“活”起來的小秘密——AJAX。你可能遇到過這種情況&#xff1a;點個按鈕&#xff0c;頁面就刷新&#xff0c;等得心急火燎。但用了AJAX的網站&#xff0c;比如購物車更新或搜索建議&#xff0c;數據嗖嗖就來了&#xff0c;整個頁面卻紋…

【iOS】Block基礎知識和底層探索

文章目錄前言Block的聲明和創建問題引入Block的底層結構Block的執行流程Block的創建與存儲Block的傳遞與調用Block的捕獲機制捕獲局部變量捕獲全局變量小結Block的類型__block修飾符__block變量的包裝結構體block的實例結構體block的執行邏輯Block循環引用造成的原因解決方法小…

1.Ansible 自動化介紹

1-Ansible 自動化介紹 Ansible 自動化介紹 手動執行任務和自動化執行任務 手動執行任務的麻煩事&#xff1a; 很容易漏掉某個步驟&#xff0c;或者不小心執行錯步驟&#xff0c;而且很難驗證每個步驟是不是真的按預期完成了。管理一大堆服務器時&#xff0c;很容易出現配置…

2025年云手機場景適配的行業觀察

2025年的市場中&#xff0c;云手機品牌百花齊放&#xff0c;不同品牌在性能、功能和場景適配性上的差異日益顯著。隨著云計算技術的快速發展&#xff0c;云手機已從 嘗鮮工具 演變為游戲、辦公、企業運營等場景的剛需工具。現市面上也有著更多的云手機品牌&#xff0c;結合實測…

Date/Calendar/DateFormat/LocalDate

作用說明Date用于定義時間&#xff0c;提供date對象間的比較方法Calendar(日歷類),提供對時間的運算方法DateFormat是接口&#xff0c;它的實現類SimpleDateFormat用來規范時間輸出形式LocalDate&#xff0c;在JDK1.8之后引入&#xff0c;方便了對時間的運算方法介紹Date常用方…

在Python 3.8環境中安裝Python 3.6兼容包的方法

在Python 3.8環境中安裝Python 3.6兼容包的方法 用戶的需求是&#xff1a;在Python 3.8環境中重新安裝原本為Python 3.6設計的包。這通常涉及兼容性問題&#xff0c;因為Python 3.8可能引入了一些語法或API變更&#xff0c;導致舊包無法直接運行。以下是逐步解決方案&#xff…

三種DuckDB電子表格插件的union all查詢性能對比

我選取了最穩定、兼容性最好的三種&#xff1a;官方excel對應函數read_xlsx()、官方spatial對應函數st_read()、rusty_sheet對應函數read_sheet。 1.建立兩個包含前50萬和后54萬的xlsx文件&#xff0c;用于比較。利用官方excel的copy()to進行。 D copy (from v1 order by l_ord…

Python 中使用多進程編程的“三兩”問題

文章目錄一、簡介二、選擇合適的啟動方式三、手動終止所有的進程小結一、簡介 這里簡單介紹在Python中使用多進程編程的時候容易遇到的情況和解決辦法&#xff0c;有助于排查和規避某類問題&#xff0c;但是具體問題還是需要具體分析&#xff0c;后續會補充更多的內容。 二、…