算法模版,今天開始背

  1. 二分查找算法
int left_bound(int[] nums, int target) {int left = 0, right = nums.length - 1;// 搜索區間為 [left, right]while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < target) {// 搜索區間變為 [mid+1, right]left = mid + 1;} else if (nums[mid] > target) {// 搜索區間變為 [left, mid-1]right = mid - 1;} else if (nums[mid] == target) {// 收縮右側邊界right = mid - 1;}}// 判斷 target 是否存在于 nums 中// 如果越界,target 肯定不存在,返回 -1if (left < 0 || left >= nums.length) {return -1;}// 判斷一下 nums[left] 是不是 targetreturn nums[left] == target ? left : -1;
}
  1. 滑動窗口算法

上下是對稱的


/* 滑動窗口算法框架 */
void slidingWindow(String s) {// 用合適的數據結構記錄窗口中的數據HashMap<Character, Integer> window = new HashMap<>();int left = 0, right = 0;while (right < s.length()) {// c 是將移入窗口的字符char c = s.charAt(right);window.put(c, window.getOrDefault(c, 0) + 1);// 增大窗口right++;// 進行窗口內數據的一系列更新.../*** debug 輸出的位置 ***/// 注意在最終的解法代碼中不要 print// 因為 IO 操作很耗時,可能導致超時System.out.printf("window: [%d, %d)\n", left, right);/********************/// 判斷左側窗口是否要收縮while (left < right && window needs shrink) {// d 是將移出窗口的字符char d = s.charAt(left);window.put(d, window.get(d) - 1);// 縮小窗口left++;// 進行窗口內數據的一系列更新...}}
}
  1. 二叉樹的層序遍歷

// 輸入一棵二叉樹的根節點,層序遍歷這棵二叉樹
void levelTraverse(TreeNode root) {if (root == null) return;Queue<TreeNode> q = new LinkedList<>();q.offer(root);// 從上到下遍歷二叉樹的每一層while (!q.isEmpty()) {int sz = q.size();// 從左到右遍歷每一層的每個節點for (int i = 0; i < sz; i++) {TreeNode cur = q.poll();// 將下一層節點放入隊列if (cur.left != null) {q.offer(cur.left);}if (cur.right != null) {q.offer(cur.right);}}}
}
  1. 動態規劃算法
以最小硬幣數為例
class Solution {int[] memo;int coinChange(int[] coins, int amount) {memo = new int[amount + 1];// 備忘錄初始化為一個不會被取到的特殊值,代表還未被計算Arrays.fill(memo, -666);return dp(coins, amount);}int dp(int[] coins, int amount) {if (amount == 0) return 0;if (amount < 0) return -1;// 查備忘錄,防止重復計算if (memo[amount] != -666)return memo[amount];int res = Integer.MAX_VALUE;for (int coin : coins) {// 計算子問題的結果int subProblem = dp(coins, amount - coin);// 子問題無解則跳過if (subProblem == -1) continue;// 在子問題中選擇最優解,然后加一res = Math.min(res, subProblem + 1);}// 把計算結果存入備忘錄memo[amount] = (res == Integer.MAX_VALUE) ? -1 : res;return memo[amount];}
}
  1. Nsum問題
class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);return nSum(nums,4,0,target);}public List<List<Integer>> nSum(int[] nums, int n, int start , long target){List<List<Integer>> result = new ArrayList<>();if(n==2){int left = start;int right = nums.length -1 ;while(left<right){int leftValue = nums[left];int rightValue = nums[right];int sum = leftValue + rightValue;if(sum==target){List<Integer> collect = new ArrayList<>();collect.add(leftValue);collect.add(rightValue);result.add(collect);    while(left<right&&nums[left]==leftValue) left++;while(left<right&&nums[right]==rightValue) right--;       }else if( sum > target){right--;while(left<right&&nums[right]==rightValue) right--;  }else{left++;while(left<right&&nums[left]==leftValue) left++;}}}else{for(int i = start;i<nums.length;i++){List<List<Integer>> temp = nSum(nums,n-1,i+1,target-nums[i]);for(List<Integer> list : temp){list.add(nums[i]);result.add(list);}while(i<nums.length-1&&nums[i]==nums[i+1]) i++;}}return result;}}

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

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

相關文章

ubuntu更換國內apt源

ubuntu必備操作 1 更換apt鏡像源 備份鏡像 cp /etc/apt/sources.list /etc/apt/sources.list.bak查看自己ubuntu版本 # 查看自己的codename #查看自己的ubuntu版本[注意關注&#xff1a;DISTRIB_CODENAME&#xff0c;發行代號] cat /etc/*release# DISTRIB_CODENAMEcosmic …

面試熱題(合并K個升序鏈表)

給定一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 輸入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 輸出&#xff1a;[1,1,2,3,4,4,5,6] 解釋&#xff1a;鏈表數組如下&#xff1a; [1->4->5,1…

【軟件工程】面向對象方法-RUP

RUP&#xff08;Rational Unified Process&#xff0c;統一軟件開發過程&#xff09;。 RUP特點 以用況驅動的&#xff0c;以體系結構為中心的&#xff0c;迭代增量式開發 用況驅動 用況是能夠向用戶提供有價值結果的系統中的一種功能用況獲取的是功能需求 在系統的生存周期中…

解決在vue中img標簽不顯示圖片的問題

在vue中, 經常會遇到img標簽不展示的問題, 本人遇到兩種, 都是因為webpack打包, 導致找不到路徑, 所以不現實, 總結幾個可以解決本地圖片路徑顯示不出來的問題&#xff1a; 1.把圖片放在src同級的static文件夾下。 2.把圖片放在cdn上&#xff0c;把網絡地址存在imgUrl里&#x…

RabbitMQ: 詳解、使用教程和示例

RabbitMQ: 詳解、使用教程和示例 什么是 RabbitMQ&#xff1f; RabbitMQ 是一個開源的消息代理&#xff08;Message Broker&#xff09;軟件&#xff0c;它實現了高級消息隊列協議&#xff08;AMQP&#xff09;&#xff0c;用于在應用程序之間進行異步消息傳遞。它允許應用程…

uni-app日期選擇器

寫個簡單的日期選擇器&#xff0c;還沒搞樣式&#xff0c;所以有點丑 大概長這樣吧 首先是這個picker選擇器&#xff0c;mode選擇日期&#xff0c;end是寫一個范圍前日期&#xff0c;:end就是這個日期是動態變化的&#xff0c;還有change函數 <template><view>&l…

【pinia】Pinia入門和基本使用:

文章目錄 一、 什么是pinia二、 創建空Vue項目并安裝Pinia1. 創建空Vue項目2. 安裝Pinia并注冊 三、 實現counter四、 實現getters五、 異步action六、 storeToRefs保持響應式解構七、基本使用&#xff1a;【1】main.js【2】store》index.js【3】member.ts 一、 什么是pinia P…

Python:列表、元組、集合、字典,數據類型之間的 5 個差異

Python&#xff1a;列表、元組、集合、字典&#xff0c;數據類型之間的 5 個差異 1. 相同點2. 不同點2.1 排序2.2 索引2.3 可變性2.5 允許的類型2.4 允許重復 源碼 這篇博客將介紹列表、元組、集合、字典&#xff08;lists, tuples, sets, and dictionaries&#xff09;數據類型…

6.0 Python 使用函數裝飾器

裝飾器可以使函數執行前和執行后分別執行其他的附加功能&#xff0c;這種在代碼運行期間動態增加功能的方式&#xff0c;稱之為"裝飾器"(Decorator)&#xff0c;裝飾器的功能非常強大&#xff0c;裝飾器一般接受一個函數對象作為參數&#xff0c;以對其進行增強&…

安達發APS|生產計劃排產軟件助力加工制造業智能化轉型

隨著全球經濟一體化的不斷深入&#xff0c;市場競爭日益激烈&#xff0c;加工制造企業面臨著巨大的生存壓力。在這種情況下&#xff0c;企業對于生產計劃的精細化管理需求日益迫切。為了適應這一市場需求&#xff0c;安達發推出了專門針對加工企業的APS生產計劃排產軟件&#x…

新一代構建工具 maven-mvnd

新一代構建工具 maven-mvnd mvnd的前世今生下載安裝 mvndIDEA集成 mvnd的前世今生 maven 作為一代經典的構建工具&#xff0c;流行了很多年&#xff0c;知道現在依然是大部分Java項目的構建工具的首選&#xff1b;但隨著項目復雜度提高&#xff0c;代碼量及依賴庫的增多使得ma…

簡單易懂的 Postman Runner 參數自增教程

目錄 什么是 Postman Runner&#xff1f; Postman Runner 如何實現參數自增&#xff1f; 步驟一&#xff1a;設置全局參數 步驟二&#xff1a;將全局參數帶入請求參數 步驟三&#xff1a;實現參數自增 資料獲取方法 什么是 Postman Runner&#xff1f; Postman Runner 是…

Python爬蟲(1)一次性搞定Selenium(新版)8種find_element元素定位方式

selenium中有8種不錯的元素定位方式&#xff0c;每個方式和應用場景都不一樣&#xff0c;需要根據自己的使用情況來進行修改 8種find_element元素定位方式 1.id定位2.CSS定位3.XPATH定位4.name定位5.class_name定位6.Link_Text定位7.PARTIAL_LINK_TEXT定位8.TAG_NAME定位總結 …

【第一階段】kotlin中反引號中的函數名特點

在kotlin中可以直接中文定義函數&#xff0c;使用反引號進行調用 eg: fun main() {2023年8月9日定義的函數(5) }private fun 2023年8月9日定義的函數(num:Int){println("反引號的用法$num") }執行結果 在Java中is,in可以定義方法&#xff0c;但是在kotlin中is,in是…

資料分析(三)—— 基期、現期、人口、增長量

基期 基期值 現期值 - 增長量 增長量/增長率 現期值/1&#xff08;間隔)增長率 化除為乘 &#xff1a;當增長率&#xff5c;r| < 5% 時&#xff0c;&#xff0c; 注&#xff1a;當選項首位相同&#xff0c;第二位也相同時&#xff0c;只能用直除 基期和差 (結合選…

SolidUI社區-根據Prompt打造人設

背景 隨著文本生成圖像的語言模型興起&#xff0c;SolidUI想幫人們快速構建可視化工具&#xff0c;可視化內容包括2D,3D,3D場景&#xff0c;從而快速構三維數據演示場景。SolidUI 是一個創新的項目&#xff0c;旨在將自然語言處理&#xff08;NLP&#xff09;與計算機圖形學相…

【openwrt學習筆記】dnsmasq源碼閱讀

目錄 一、DHCP(Dynamic Host Configuration Protocol)1.1 前置知識1.2 參考鏈接1.3 IP地址分配代碼分析rfc2131.cdhcp-common.cdhcp.c 1.4 幾個小問題1.4.1 連續IP模式&#xff08;sequential_ip&#xff09;1.4.2 重新連接使用IP地址1.4.3 續約租期1.4.4 不同的MAC地址分配到相…

VS+Qt+C++旅游景區地圖導航源碼實例

程序示例精選 VSQtC旅游景區地圖導航 如需安裝運行環境或遠程調試&#xff0c;見文章底部個人QQ名片&#xff0c;由專業技術人員遠程協助&#xff01; 前言 這篇博客針對<<VSQtC旅游景區地圖導航>>編寫代碼&#xff0c;代碼整潔&#xff0c;規則&#xff0c;易讀。…

【Vue框架】菜單欄權限的使用與顯示

前言 在 【Vue框架】Vue路由配置 中的getters.js里&#xff0c;可以看到有一個應用程序的狀態&#xff08;變量&#xff09;叫 permission_routes&#xff0c;這個就是管理前端菜單欄的狀態。具體代碼的介紹&#xff0c;都以注釋的形式來說明。 1、modules\permission.js 1…

SpringBoot 將項目打包成 jar 包

SpringBoot 將項目打包成 jar 包 一、項目打包成 jar 包 首先在 pom.xml 文件中導入 Springboot 的 maven 依賴 <!-- 將應用打包成一個可以執行的 jar 包 --> <build><plugins><plugin><groupId>org.springframework.boot</groupId><…