算法基礎十一

組合

給定兩個整數 n 和 k,返回范圍 [1, n] 中所有可能的 k 個數的組合。

示例 1:
輸入:n = 4, k = 2 輸出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
示例 2:
輸入:n = 1, k = 1 輸出:[[1]]

解題思路:DFS

public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList<>();if (k <= 0 || n < k) {return res;}// 從 1 開始是題目的設定Deque<Integer> path = new ArrayDeque<>();dfs(n, k, 1, path, res);return res;}private void dfs(int n, int k, int begin, Deque<Integer> path, List<List<Integer>> res) {// 遞歸終止條件是:path 的長度等于 kif (path.size() == k) {res.add(new ArrayList<>(path));return;}// 遍歷可能的搜索起點for (int i = begin; i <= n; i++) {// 向路徑變量里添加一個數path.addLast(i);// 下一輪搜索,設置的搜索起點要加 1,因為組合數理不允許出現重復的元素dfs(n, k, i + 1, path, res);// 重點理解這里:深度優先遍歷有回頭的過程,因此遞歸之前做了什么,遞歸之后需要做相同操作的逆向操作path.removeLast();}}

子集

給你一個整數數組 nums ,數組中的元素 互不相同 。返回該數組所有可能的子集(冪集)。解集 不能 包含重復的子集。

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

解題思路:DFS

public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res = new ArrayList<>();backtrack(0, nums, res, new ArrayList<Integer>());return res;}private void backtrack(int i, int[] nums, List<List<Integer>> res, ArrayList<Integer> tmp) {res.add(new ArrayList<>(tmp));for (int j = i; j < nums.length; j++) {tmp.add(nums[j]);backtrack(j + 1, nums, res, tmp);tmp.remove(tmp.size() - 1);}}

單詞搜索

給定一個 m * n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中,返回 true ;否則,返回 false 。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。

示例 1:
輸入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],
word = “ABCCED” 輸出:true
示例 2:
輸入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],
word = “SEE” 輸出:true
示例 3:
輸入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],
word = “ABCB” 輸出:false

public boolean exist(char[][] board, String word) {int h = board.length, w = board[0].length;boolean[][] visited = new boolean[h][w];for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {boolean flag = check(board, visited, i, j, word, 0);if (flag) {return true;}}}return false;}public boolean check(char[][] board, boolean[][] visited, int i, int j, String s, int k) {if (board[i][j] != s.charAt(k)) {return false;} else if (k == s.length() - 1) {return true;}visited[i][j] = true;int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};boolean result = false;for (int[] dir : directions) {int newi = i + dir[0], newj = j + dir[1];if (newi >= 0 && newi < board.length && newj >= 0 && newj < board[0].length) {if (!visited[newi][newj]) {boolean flag = check(board, visited, newi, newj, s, k + 1);if (flag) {result = true;break;}}}}visited[i][j] = false;return result;}

刪除有序數組中的重復項2

給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使得出現次數超過兩次的元素只出現兩次 ,返回刪除后數組的新長度。

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

public int removeDuplicates(int[] nums) {int n = nums.length;if (n <= 2) {return n;}int slow = 2, fast = 2;while (fast < n) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;}

搜索旋轉排序數組2

已知存在一個按非降序排列的整數數組 nums ,數組中的值不必互不相同。
在傳遞給函數之前,nums 在預先未知的某個下標 k(0 <= k < nums.length)上進行了 旋轉 ,使數組變為 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下標 從 0 開始 計數)。例如, [0,1,2,4,4,4,5,6,6,7] 在下標 5 處經旋轉后可能變為 [4,5,6,6,7,0,1,2,4,4] 。
給你 旋轉后 的數組 nums 和一個整數 target ,請你編寫一個函數來判斷給定的目標值是否存在于數組中。如果 nums 中存在這個目標值 target ,則返回 true ,否則返回 false 。

示例 1:
輸入:nums = [2,5,6,0,0,1,2], target = 0 輸出:true
示例 2:
輸入:nums = [2,5,6,0,0,1,2], target = 3 輸出:false

 public boolean search(int[] nums, int target) {int n = nums.length;if (n == 0) {return false;}if (n == 1) {return nums[0] == target;}int l = 0, r = n - 1;while (l <= r) {int mid = (l + r) / 2;if (nums[mid] == target) {return true;}if (nums[l] == nums[mid] && nums[mid] == nums[r]) {++l;--r;} else if (nums[l] <= nums[mid]) {if (nums[l] <= target && target < nums[mid]) {r = mid - 1;} else {l = mid + 1;}} else {if (nums[mid] < target && target <= nums[n - 1]) {l = mid + 1;} else {r = mid - 1;}}}return false;}

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

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

相關文章

用C語言了解文件那些下 ‘流‘ 事

本篇會加入個人的所謂‘魚式瘋言’??????魚式瘋言:??????此瘋言非彼瘋言,而是理解過并總結出來通俗易懂的大白話,我會盡可能的在每個概念后插入魚式瘋言,幫助大家理解的&#xff0c;可能說的不是那么嚴謹.但小編初心是能讓更多人能接受我們這個概念 前言 &#…

uniapp實戰 —— 自定義頂部導航欄

效果預覽 下圖中的紅框區域 范例代碼 src\pages.json 配置隱藏默認頂部導航欄 "navigationStyle": "custom", // 隱藏默認頂部導航src\pages\index\components\CustomNavbar.vue 封裝自定義頂部導航欄的組件&#xff08;要點在于&#xff1a;獲取屏幕邊界…

理解Go中的指針

引言 當你用Go編寫軟件時,你將編寫函數和方法。你可以將數據作為參數傳遞給這些函數。有時,函數需要數據的本地副本,而你希望原始數據保持不變。例如,如果你是一家銀行,你有一個函數向用戶顯示根據他們選擇的儲蓄計劃而產生的余額變化,你不希望在客戶選擇計劃之前更改他…

OpenAI在中國,申請GPT-6、GPT-7商標

根據最新商標信息顯示&#xff0c;OpenAI已經在中國提交了GPT-6和GPT-7的商標注冊信息&#xff0c;分類是科學儀器和網站服務兩大類。申請日期是今年的11月2日&#xff0c;目前處于審核狀態。 該申請由知識產權代理公司完成&#xff0c;但申請人的地址正是OpenAI在美國公司的地…

Echarts圖表title使用富文本

rich中有配置的話&#xff08;如a&#xff09;使用該樣式&#xff0c;沒有配置樣式的話&#xff08;如b&#xff09;使用外層textstyle的樣式&#xff0c;textstyle沒有樣式的話使用默認樣式 const option1 {tooltip: {trigger: "item",},title: {text: ["{a|1…

Java代碼審計之SpEL表達式注入漏洞分析

文章目錄 前言SpEL表達式基礎基礎用法安全風險案例演示 CVE-2022-22963漏洞簡述環境搭建反彈shell CVE漏洞調試分析本地搭建調試分析補丁分析 總結 前言 表達式注入是 Java 安全中一類常見的能夠注入命令并形成 RCE 的漏洞&#xff0c;而常見的表達式注入方式有 EL 表達式注入…

124.(leaflet篇)leaflet禁止地圖移動,縮放,雙擊

地圖之家總目錄(訂閱之前必須詳細了解該博客) 完整代碼工程包下載,運行如有問題,可“私信”博主。效果如下所示: 下面獻上完整代碼,代碼重要位置會做相應解釋 <!DOCTYPE html> <html>

深入探索HTTPS加密技術與新興安全趨勢:保衛隱私的未來之路

在前文中&#xff0c;我們了解了HTTPS加密協議的工作原理和應用場景。然而&#xff0c;隨著技術的不斷發展和網絡安全威脅的不斷演變&#xff0c;HTTPS加密技術也在不斷進化。在本篇博文中&#xff0c;我們將更深入地探討HTTPS加密技術&#xff0c;并介紹一些新興的安全趨勢&am…

css中的 box-sizing: border-box

box-sizing: border-box 是 CSS 中的一個盒子模型屬性&#xff0c;用于指定元素的盒子模型的計算方式。默認的盒子模型是 content-box&#xff0c;而使用 border-box 則表示元素的寬度和高度包括了元素的邊框和內邊距&#xff0c;而不僅僅是內容的寬度和高度。 在默認的 conte…

【Docker】使用docker-compose搭建django+vue工程文章

我們嘗試使用docker-compose編排一個后端基于django,前端基于vue,數據庫為postgresql并使用nginx進行反向代理的web工程。 工程準備 Docker 安裝Docker 安裝docker-compose django 在python3.7的環境下創建 修改settings.py文件 修改 將靜態文件收集路徑添加進 ,筆…

pip指定優先從豆瓣源下載包

對于 Unix/macOS 系統&#xff0c;使用以下命令&#xff1a; pip config set global.index-url https://pypi.douban.com/simple/ 對于 Windows 系統&#xff0c;打開命令提示符或PowerShell&#xff0c;并使用相同的命令&#xff1a; pip config set global.index-url http…

react re-render的解決方案

問題代碼 import {Dispatch, FC, SetStateAction, useState} from reactimport ./App.cssconst Child: FC<{ m: number, setM: Dispatch<SetStateAction<number>> }> (props) > {const {m, setM } propsreturn (<div><button onClick{() &…

阿里java社招一面

1、項目所負責的功能介紹&#xff1b;B用戶對A用戶的用餐評價進行評論以及B用戶對評論進行追評的話怎么設計數據庫結構&#xff1b;菜品好評度排行榜怎么實現的 2、clickhouse為什么快 3、線程池有哪幾種&#xff0c;分別說說定義和優缺點&#xff1b;多線程使用過程中要注意…

XUbuntu22.04之8款免費UML工具(一百九十七)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

前端知識筆記(四)———JQuery 自動刷新頁面但不閃爍的實現方法

在本文中&#xff0c;我們將介紹如何使用jQuery實現自動刷新頁面但不出現閃爍的效果。通常情況下&#xff0c;當我們需要自動刷新頁面時&#xff0c;使用簡單的location.reload()方法即可實現&#xff0c;但這會導致頁面在刷新時出現短暫的白屏或閃爍。為了解決這個問題&#x…

供應鏈管理痛點大解析!內附解決方案

供應鏈是指涉及產品或服務生產、運輸、分銷和最終交付給客戶的過程。 用一個汽車制造的例子來幫助大家理解&#xff1a; 原材料采購&#xff1a; 汽車制造商需要從供應商處采購制造汽車所需的原材料&#xff0c;例如金屬、橡膠、塑料和玻璃。生產制造&#xff1a;獲得原材料&…

UnoCSS 原子化開發初體驗

UnoCSS 是一個即時的原子化 CSS 引擎&#xff0c;旨在靈活和可擴展。核心是不拘一格的&#xff0c;所有的 CSS 工具類都是通過預設提供的。再也不用為了取一個 classname 類名而煩惱了。 一、UnoCSS 特點 完全可定制&#xff1a;無核心工具&#xff0c;所有功能都通過預設提供…

如何公網訪問內網的群暉NAS隨時隨地遠程訪問本地存儲的學習資源

文章目錄 前言本教程解決的問題是&#xff1a;按照本教程方法操作后&#xff0c;達到的效果是前排提醒&#xff1a; 1. 搭建群暉虛擬機1.1 下載黑群暉文件vmvare虛擬機安裝包1.2 安裝VMware虛擬機&#xff1a;1.3 解壓黑群暉虛擬機文件1.4 虛擬機初始化1.5 沒有搜索到黑群暉的解…

成都工業學院Web技術基礎(WEB)實驗六:ECMAScript基礎語法

寫在前面 1、基于2022級計算機大類實驗指導書 2、代碼僅提供參考&#xff0c;前端變化比較大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一樣 3、圖片和文字僅為示例&#xff0c;需要自行替換 4、如果代碼不滿足你的要求&#xff0c;請尋求其他的…

TwinCAT3 Modbus-TCP Client/Server使用

目錄 一、環境配置和準備 1、PLC中安裝TF6250-Modbus-TCP庫 2、勾選TF6250的license 3、PLC工程中添加Tc2_ModbusSrv庫文件 4、分別創建測試ModbusTCP測試的Server和Client程序 二、PLC作為Client端 1、設置測試電腦IP地址 2、運行MobusTCP測試工具 3、PLC端程序編寫 …