赞
踩
关于数据结构方面,一般考察都是手写代码。这个建议大家在面试之前一定要牢牢地记住怎么写,一定要自己多写几遍,另外尝试在纸上手写代码,手写代码和使用IDEA写代码地感觉是完全不一样的。另外需要掌握的是算法的思想和流程。
算法思想:
/** * 冒泡排序:两两比较,大者交换位置,则每一轮循环结束后最大的数会移动到最后 * 时间复杂度为 O(n^2) 空间复杂度为 O(1) */ private static void bubbleSort(int[] arr){ //外层循环 length-1 次 for(int i=0;i<arr.length-1;i++){ //外层每循环一次最后都会安排一个数 //所以内层循环length-1-i 次 for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
注意时间复杂度为O(n^2)。
二分查找算法也称为折半搜索,二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。请注意这种算法是建立在有序数组基础上的。
public static int binarySearch(int srcArray,int des){
int low=0;
int height=srcArray.length-1;
while(low<=height){
int middle=(low+height)/2;
if(des==srcArray[middle]){
return middle;
}else if(des<srcArray[middle]){
height=middle-1;
}else{
low=middle+1;
}
}
return -1;
}
注意时间复杂度为O(log n)。
public static int binarySearch(int[] dataset;int data,int beginIndex,int endIndex){
int midIndex=(beginIndex+endIndex)/2;
if(data<dataset[beginIndex] || data>dataset[endIndex] || beginIndex>endIndex){
return -1;
}
if(data<dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex]){
return binarySearch(dataset,data,midIndex+1,endIndex);
}else{
return midIndex;
}
}
递归也是手写代码的算法题中经常考察的点。需要能够掌握。
class ListNode{ int val; ListNode next; ListNode(int x){ val = x; } } public static ListNode reverseList(ListNode head){ ListNode prev=null; while(head !=null){ ListNode temp=head.next; head.next=prev; prev=head; head=temp; } return prev; }
在面试手写代码时经常会考。建议能够掌握。
public static void insertSort(int[] a){
int temp;
for(int i=1;i<a.length;i++){
for(int j=i;j>0;j--){
if(a[j-1]>a[j]){
temp=a[j-1];
a[j-1]=a[j]
a[j]=temp
}
}
}
}
需要能够掌握算法的过程,以及代码的书写。
把最小或者最大的选择出来。
public static void selectSort(int[] a){ if(a==null || a.length<=0){ return; } for(int i=0;i<a.length;i++){ int min=i; for(int j=i+1;j<a.length;j++){ if(a[j]<a[min]){ min=j; } } if(i !=min){ int tmp=a[min]; a[min]=a[i]; a[i]=tmp; } } }
需要能够掌握算法的过程,以及代码的书写。
就是一种简单的数据结构,采用的调度策略是先来先进,先进先出。
二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加。但是他也有自己的缺点:删除操作复杂。所谓二叉树的层数,就是深度。具体二叉树分类如下:
/*定义一个方法,接收一个int数组,在方法内新建一个数组, 将传进来的数组中的元素装进去,但是要求奇数在左边偶数在右边。 最后返回这个新数组。在mian方法中调用定义数组,调用该方法,获取返回值, 并遍历输出返回的数组*/ public class Test34{ public static void main(String[] args){ int[] arr={1,2,3,4,5,6,7,8,9,0}; int[] newArr=newArray(arr); //遍历数组 for (int i=0;i<newArr.length;i++){ System.out.print(newArr[i]+"\t"); } } public static int[] newArray(int[] arr){ int[] newArr=new int[arr.length];//定义新的数组 //定义两个变量 int index1=0; int index2=arr.length-1; for(int i=0;i<arr.length;i++){ if(arr[i]%2!=0){ //奇数放到新数组的左边 newArr[index1]=arr[i]; //索引值++ index1++; }else{ //偶数放到新数组的右边 newArr[index2]=arr[i]; //索引值-- index2--; } } return newArr; } }
比较基础的算法面试题。需要通过多练习来提高自己编码能力。
Java 主要有以下一些数据结构:
需要了解 Java 的一些数据结构类型。具体数据结构的理解,不是大数据开发工程师的重点。但如果想要进大厂(BAT类型),建议加强算法学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。