news 2026/4/16 17:27:24

Java模拟算法题目练习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java模拟算法题目练习

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)详细解析或更多代码,随时提问。加油!🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 9:56:26

科研利器:快速部署AI图像生成模型进行学术实验

科研利器&#xff1a;快速部署AI图像生成模型进行学术实验 作为一名心理学研究员&#xff0c;你是否曾为实验材料的设计而烦恼&#xff1f;AI图像生成技术为心理学实验提供了全新的可能性&#xff0c;但复杂的部署过程往往让非技术背景的研究者望而却步。本文将介绍如何利用预置…

作者头像 李华
网站建设 2026/4/15 9:56:25

从零到一:30分钟搞定阿里通义Z-Image-Turbo WebUI二次开发环境

从零到一&#xff1a;30分钟搞定阿里通义Z-Image-Turbo WebUI二次开发环境 为什么选择预装环境进行二次开发 如果你正在尝试对阿里通义Z-Image-Turbo进行二次开发&#xff0c;可能会遇到本地环境配置的各种问题。从CUDA版本冲突到Python依赖包不兼容&#xff0c;这些问题往往…

作者头像 李华
网站建设 2026/4/15 11:36:58

Python+Matplotlib:大数据可视化的高效解决方案

Python+Matplotlib:大数据可视化的高效实践指南——从百万级数据到交互式图表 一、引言:大数据可视化的「痛」与「解」 你有没有过这样的崩溃瞬间? 面对100万行的用户行为数据,用Matplotlib画折线图时,程序卡了5分钟还没出图;想做个能拖动时间轴的交互式图,却不知道怎…

作者头像 李华
网站建设 2026/4/15 11:34:11

手机号码隐藏中间4位

以下方法都是使用正则的方式 JAVA val phone"182345678902"; const phoneReg /^1\d{10}$/; if (!phoneReg.test(phone)) {console.log(手机号格式错误);return false; } var replacephone.replace(/(\d{3})\d{4}(\d{4})/, $1****$2);JS String phone"182345678…

作者头像 李华