Java 高頻算法

Java高頻算法面試題

以下是Java面試中常見的高頻算法題目,涵蓋了數據結構、算法思想和實際應用場景。

一、數組與字符串

1. 兩數之和

public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];if (map.containsKey(complement)) {return new int[] { map.get(complement), i };}map.put(nums[i], i);}throw new IllegalArgumentException("No two sum solution");
}

2. 最長無重復字符子串

public int lengthOfLongestSubstring(String s) {Map<Character, Integer> map = new HashMap<>();int max = 0, left = 0;for (int right = 0; right < s.length(); right++) {char c = s.charAt(right);if (map.containsKey(c)) {left = Math.max(left, map.get(c) + 1);}map.put(c, right);max = Math.max(max, right - left + 1);}return max;
}

二、鏈表操作

3. 反轉鏈表

public ListNode reverseList(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode next = curr.next;curr.next = prev;prev = curr;curr = next;}return prev;
}

4. 合并兩個有序鏈表

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(-1);ListNode curr = dummy;while (l1 != null && l2 != null) {if (l1.val < l2.val) {curr.next = l1;l1 = l1.next;} else {curr.next = l2;l2 = l2.next;}curr = curr.next;}curr.next = l1 == null ? l2 : l1;return dummy.next;
}

三、樹結構

5. 二叉樹的最大深度

public int maxDepth(TreeNode root) {if (root == null) return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}

6. 驗證二叉搜索樹

private boolean isValidBST(TreeNode node, long lower, long upper) {if (node == null) return true;if (node.val <= lower || node.val >= upper) return false;return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);
}

四、排序與搜索

7. 快速排序

public void quickSort(int[] arr, int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}private int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;
}private void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}

8. 二分查找

public int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) return mid;if (nums[mid] < target) left = mid + 1;else right = mid - 1;}return -1;
}

五、動態規劃

9. 爬樓梯

public int climbStairs(int n) {if (n == 1) return 1;int[] dp = new int[n + 1];dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
}

10. 最長遞增子序列

public int lengthOfLIS(int[] nums) {int[] dp = new int[nums.length];Arrays.fill(dp, 1);int max = 1;for (int i = 1; i < nums.length; i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}max = Math.max(max, dp[i]);}return max;
}

六、回溯算法

11. 全排列

public List<List<Integer>> permute(int[] nums) {List<List<Integer>> res = new ArrayList<>();backtrack(res, new ArrayList<>(), nums);return res;
}private void backtrack(List<List<Integer>> res, List<Integer> temp, int[] nums) {if (temp.size() == nums.length) {res.add(new ArrayList<>(temp));} else {for (int i = 0; i < nums.length; i++) {if (temp.contains(nums[i])) continue;temp.add(nums[i]);backtrack(res, temp, nums);temp.remove(temp.size() - 1);}}
}

12. 組合總和

public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> res = new ArrayList<>();Arrays.sort(candidates);backtrack(res, new ArrayList<>(), candidates, target, 0);return res;
}private void backtrack(List<List<Integer>> res, List<Integer> temp, int[] candidates, int remain, int start) {if (remain < 0) return;if (remain == 0) {res.add(new ArrayList<>(temp));return;}for (int i = start; i < candidates.length; i++) {temp.add(candidates[i]);backtrack(res, temp, candidates, remain - candidates[i], i);temp.remove(temp.size() - 1);}
}

七、其他重要算法

13. LRU緩存機制

class LRUCache {class DLinkedNode {int key;int value;DLinkedNode prev;DLinkedNode next;}private Map<Integer, DLinkedNode> cache = new HashMap<>();private int size;private int capacity;private DLinkedNode head, tail;public LRUCache(int capacity) {this.size = 0;this.capacity = capacity;head = new DLinkedNode();tail = new DLinkedNode();head.next = tail;tail.prev = head;}public int get(int key) {DLinkedNode node = cache.get(key);if (node == null) return -1;moveToHead(node);return node.value;}public void put(int key, int value) {DLinkedNode node = cache.get(key);if (node == null) {DLinkedNode newNode = new DLinkedNode();newNode.key = key;newNode.value = value;cache.put(key, newNode);addNode(newNode);size++;if (size > capacity) {DLinkedNode tail = popTail();cache.remove(tail.key);size--;}} else {node.value = value;moveToHead(node);}}private void addNode(DLinkedNode node) {node.prev = head;node.next = head.next;head.next.prev = node;head.next = node;}private void removeNode(DLinkedNode node) {DLinkedNode prev = node.prev;DLinkedNode next = node.next;prev.next = next;next.prev = prev;}private void moveToHead(DLinkedNode node) {removeNode(node);addNode(node);}private DLinkedNode popTail() {DLinkedNode res = tail.prev;removeNode(res);return res;}
}

14. 實現Trie(前綴樹)

class Trie {class TrieNode {TrieNode[] children = new TrieNode[26];boolean isEnd;}private TrieNode root;public Trie() {root = new TrieNode();}public void insert(String word) {TrieNode node = root;for (char c : word.toCharArray()) {if (node.children[c - 'a'] == null) {node.children[c - 'a'] = new TrieNode();}node = node.children[c - 'a'];}node.isEnd = true;}public boolean search(String word) {TrieNode node = searchPrefix(word);return node != null && node.isEnd;}public boolean startsWith(String prefix) {return searchPrefix(prefix) != null;}private TrieNode searchPrefix(String prefix) {TrieNode node = root;for (char c : prefix.toCharArray()) {if (node.children[c - 'a'] == null) return null;node = node.children[c - 'a'];}return node;}
}

這些算法題目覆蓋了Java面試中最常見的數據結構和算法問題。建議不僅要理解這些解決方案,還要能夠分析它們的時間復雜度和空間復雜度,并思考可能的優化方法。

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

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

相關文章

汽車控制系統——CAPL腳本

CAPL (Communication Access Programming Language) 是一種專門用于嵌入式系統和汽車電子測試領域的編程語言&#xff0c;特別是在 CAN (Controller Area Network) 總線和汽車網絡通信系統中被廣泛使用。它由 Vector 公司開發&#xff0c;主要用于編寫與汽車控制單元 (ECU) 進行…

深入解析Hive SQL轉MapReduce的編譯原理:從AST抽象語法樹到Operator執行樹

Hadoop與Hive SQL簡介Hadoop生態系統的核心架構作為大數據處理領域的基石&#xff0c;Hadoop生態系統采用分布式架構設計&#xff0c;其核心組件構成了一套完整的解決方案框架。HDFS&#xff08;Hadoop Distributed File System&#xff09;作為底層存儲系統&#xff0c;采用主…

在 React 中實現全局防復制hooks

用于防止頁面內容被復制、剪切或通過右鍵菜單操作。它接受三個可配置參數&#xff1a;disableCopy&#xff08;禁用復制&#xff0c;默認true&#xff09;、disableCut&#xff08;禁用剪切&#xff0c;默認true&#xff09;和 disableContextMenu&#xff08;禁用右鍵菜單&…

InfluxDB HTTP API 接口調用詳解(一)

引言 ** 在當今數字化時代&#xff0c;時間序列數據無處不在&#xff0c;從物聯網設備產生的傳感器數據&#xff0c;到金融領域的交易記錄&#xff0c;再到系統運維中的監控指標&#xff0c;這些數據蘊含著豐富的信息&#xff0c;對于企業的決策制定、業務優化以及問題排查等…

使用JMeter進行壓力測試(以黑馬點評為例、詳細圖解)

目錄 一、前言 二、使用JMeter進行壓力測試 一、前言 本博客主要記錄如何使用JMeter進行壓力測試&#xff0c;以黑馬點評P44利用互斥鎖解決緩存擊穿問題課程為例。至于如何完成JMeter的安裝配置及創建桌面快捷方式可以看我的另一篇博客&#xff0c;鏈接如下&#xff1a; 壓測…

舊手機部署輕量級服務器

將舊手機改造為Linux系統設備&#xff0c;不僅能賦予閑置設備新生&#xff0c;還能作為輕量級服務器、開發環境或學習平臺使用。以下是三種主流方案&#xff0c;涵蓋不同技術需求和安全等級&#xff0c;附操作步驟與避坑指南&#xff1a; ?? 一、三種安裝方案對比與選擇 方法…

micro avg、macro avg 和 weighted avg 的區別

問題描述&#xff1a; 在多分類任務的評估報告中&#xff0c;經常看到 micro avg、macro avg 和 weighted avg 三種平均指標&#xff0c;請解釋它們的區別以及各自的適用場景。&#x1f3af; 參考答案&#xff1a; 這三種平均指標是用來評估多分類模型性能的不同方式&#xff0…

Kafka灰度方案

一、kafka灰度方案架構設計方案&#xff1a;1、外部生產-內部消費場景&#xff1a;&#xff08;外部生產-內部消費&#xff09;解決方案&#xff1a;先通過kdis分流服務---消費外部生產的消息&#xff0c;然后根據管理后臺-灰度配置mcs-mimp-core應用默認的環境版本&#xff0c…

深入詳解K近鄰算法(KNN)在腦部疾病診斷中的應用與實現

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#,Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

黑馬點評練習題-給店鋪類型查詢業務添加緩存(String和List實現)

目錄 一、前言 二、需求 三、String實現 四、List實現 一、前言 這是黑馬點評實戰篇-商戶查詢緩存-0.3緩存練習題分析&#xff0c;練習給店鋪類型查詢業務添加緩存。這里我自己是通過String實現的&#xff0c;當然在網上查詢也能夠找到其他的實現方式。String實現我會展示自…

深度學習 pytorch圖像分類(詳細版)

目錄 一、項目簡介 二、模型訓練驗證保存 三、模型測試保存csv文件 四、單張圖片預測 五、模型評估 六、ONNX導出 七、ONNX推理 八、網絡結構與數據增強可視化 上篇我介紹了具體步驟&#xff0c;今天就以我實際開發的一個具體項目來講&#xff1a; 一、項目簡介 苯人的…

《AR眼鏡上聲學的應用與挑戰》

《2025GAS聲學大講堂—音頻產業創新技術公益講座》智能眼鏡專題講座第3講將于7月24日周四19點開講&#xff0c;本次邀請了 珠海莫界科技有限公司 高級算法工程師 胡立天 演講&#xff0c;講座主題&#xff1a;《AR眼鏡上聲學的應用與挑戰》&#xff08;點擊觀看直播&#xff09…

編譯支持cuda硬件加速的ffmpeg

本來以為很簡單&#xff0c;因為印象中自己在windows機器上使用過。 目前的實在一個docker環境下的ubuntu系統里。 官方操作文檔 按照官方操作文檔Using FFmpeg with NVIDIA GPU Hardware Acceleration - NVIDIA Docs的描述&#xff0c;步驟很簡單&#xff1a; 1、安裝nv-c…

在資源受限單片機中使用printf等可變參函數時的陷阱(2025年7月22日)

今天分享一個我最近在項目調試中遇到的“大坑”&#xff0c;這個坑來自一個我們既熟悉又依賴的朋友——printf函數。故事的主角&#xff0c;是一顆資源極其有限的STM32F030單片機&#xff0c;它只有區區4KB的RAM。 一切始于便利 項目初期&#xff0c;為了能方便地監控程序運行狀…

大數據之Hive:Hive中week相關的幾個函數

目錄1.dayofweek函數2.weekday函數3.weekofyear函數1.dayofweek函數 功能&#xff1a;統計某天為星期幾 dayofweek(date) - Returns the day of the week for date/timestamp (1 Sunday, 2 Monday, ..., 7 Saturday).dayofweek返回值為&#xff1a;1-7&#xff0c;1 星期…

基于深度學習Transform的steam游戲特征分析與可視化【詞云-情感詞典分析-主題分析-詞頻分析-關聯分析】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主一、項目背景與研究意義二、研究目標三、研究方法與實施流程第一階段&#xff1a;數據采集與預處理第二階段&#xff1a;多維度數據分析第三階段&#xff1a;綜合分析與策略建議輸出四、預期…

Qwen3-8B 與 ChatGPT-4o Mini 的 TTFT 性能對比與底層原理詳解

一、模型概述與上下文支持能力 1.1 Qwen3-8B 的技術特點 Qwen3-8B 是通義實驗室推出的 80 億參數大語言模型&#xff0c;支持 32,768 token 的上下文長度 。其核心優化點包括&#xff1a; FP8 量化技術&#xff1a;通過將權重從 32-bit 壓縮至 8-bit&#xff0c;顯著降低顯存…

recvmsg函數的用法

recvmsg 是 Linux 網絡編程中用于接收消息的高級系統調用&#xff0c;支持復雜數據結構和輔助數據的接收&#xff0c;適用于 TCP/UDP/UNIX 域套接字等場景?。以下是其核心用法詳解&#xff1a;?1. 函數原型與參數?#include <sys/socket.h> ssize_t recvmsg(int sockfd…

24GSPS高速DA FMC子卡

單通道 16bit 12GSPS/ 12bit 15.5GSPS/ 8bit 24GSPS雙通道 16bit 6.2GSPS/ 12bit 7.75GSPS/ 8bit 12GS/sDAC FMC子卡基于TI公司的高速DAC數模轉換器DAC39RF12ACK和時鐘芯片LMX2594而設計的標準單槽位的FMC子卡。支持單通道模式或雙通道模式&#xff0c;單通道模式下提供16bit 1…

LabVIEW動態調用VI

該組LabVIEW程序演示4 種動態調用 VI 的實現方案&#xff0c;圍繞 HTTP GET 任務&#xff08;通過 URL 抓取數據&#xff09;&#xff0c;利用不同調用邏輯&#xff0c;適配多場景下的并行 / 串行執行需求&#xff0c;助力工程師靈活構建異步、并行化程序。各方案說明&#xff…