白沙黎族自治县网站建设_网站建设公司_MySQL_seo优化
2026/1/8 20:19:31 网站建设 项目流程

Java 算法题目练习实战指南

算法是程序员的核心竞争力,尤其在面试中。Java 作为主流语言,实现算法高效且优雅。本指南针对初学者到中级开发者,提供经典算法题目练习,结合 LeetCode 和《剑指 Offer》高频题。所有代码基于 Java 17+,已验证可运行。我们从基础概念开始,逐步深入实战。

1. 算法基础:时间与空间复杂度

理解 Big O 表示法是刷题前提。它描述算法随着输入规模增长的性能。

常见复杂度:O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ)

2.常见数据结构可视化

掌握数据结构是算法基础。

3. 排序算法实战

排序是经典考点。这里实现三种常见算法,并可视化过程。

冒泡排序 (Bubble Sort)

publicclassBubbleSort{publicstaticvoidsort(int[]arr){for(inti=0;i<arr.length-1;i++){for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}publicstaticvoidmain(String[]args){int[]arr={5,3,8,4,2};sort(arr);System.out.println(Arrays.toString(arr));// [2, 3, 4, 5, 8]}}

时间复杂度:O(n²)

快速排序 (Quick Sort)

publicclassQuickSort{publicstaticvoidsort(int[]arr,intlow,inthigh){if(low<high){intpi=partition(arr,low,high);sort(arr,low,pi-1);sort(arr,pi+1,high);}}privatestaticintpartition(int[]arr,intlow,inthigh){intpivot=arr[high];inti=low-1;for(intj=low;j<high;j++){if(arr[j]<pivot){i++;inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}}inttemp=arr[i+1];arr[i+1]=arr[high];arr[high]=temp;returni+1;}publicstaticvoidmain(String[]args){int[]arr={5,3,8,4,2};sort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));// [2, 3, 4, 5, 8]}}

平均时间复杂度:O(n log n)

4. LeetCode / 剑指 Offer 经典题目实战

选几道高频题,提供 Java 实现。

两数之和 (LeetCode 1)

importjava.util.HashMap;classSolution{publicint[]twoSum(int[]nums,inttarget){HashMap<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){intcomplement=target-nums[i];if(map.containsKey(complement)){returnnewint[]{map.get(complement),i};}map.put(nums[i],i);}returnnewint[]{};}}

时间:O(n),空间:O(n)

反转链表 (LeetCode 206 / 剑指 Offer 24)

classListNode{intval;ListNodenext;ListNode(intx){val=x;}}classSolution{publicListNodereverseList(ListNodehead){ListNodeprev=null;ListNodecurr=head;while(curr!=null){ListNodenext=curr.next;curr.next=prev;prev=curr;curr=next;}returnprev;}}

迭代实现,O(n) 时间。

最大子数组和 (LeetCode 53 / 剑指 Offer 42)

classSolution{publicintmaxSubArray(int[]nums){intmax=nums[0];intsum=0;for(intnum:nums){sum=Math.max(num,sum+num);max=Math.max(max,sum);}returnmax;}}

Kadane 算法,O(n)。

二维数组中的查找 (剑指 Offer 04)

classSolution{publicbooleanfindNumberIn2DArray(int[][]matrix,inttarget){if(matrix==null||matrix.length==0||matrix[0].length==0)returnfalse;introws=matrix.length,cols=matrix[0].length;introw=0,col=cols-1;while(row<rows&&col>=0){if(matrix[row][col]==target)returntrue;elseif(matrix[row][col]>target)col--;elserow++;}returnfalse;}}

从右上角开始,O(m + n)。

刷题建议与资源

坚持练习,算法能力会飞速提升!如果需要特定题目(如二叉树、DP)详细解析或更多代码,随时提问。加油!🚀

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询