double max = numbers[0];
int pos = 0;
//2、从数组的第二个数据开始到最后,依次和最大值变量进行比较
for(int i = 1;i < numbers.length;i++){
//3、如果数据比最大值大,就把数组的数据赋值给最大值
if(numbers[i] > max){
max = numbers[i];
pos = i;
}
}
//4、输出最大值
System.out.println(“最大值是:”+max+“,位置是:”+(pos + 1));
给定一个数组和一个要查找的数据,找到该数据在数组中的位置
算法描述:
-
定义数组,位置变量,输入要查找数字
-
循环从第一个到最后一个,依次和要查找的数字进行比较
-
如果不相等就找下一个,如果相等就将下标保存到位置中
-
输出位置
Scanner input = new Scanner(System.in);
int[] numbers = {43,44,77,44,88};
System.out.println(“输入你要找的数字:”);
int num = input.nextInt();
int pos = -1;
for(int i = 0;i < numbers.length;i++){
if(num == numbers[i]){
pos = i;
break;
}
}
if(pos == -1){
System.out.println(“没有找到该数”);
}else{
System.out.println(“该数字的位置是:”+pos);
}
将数组从小到大(从大到小)顺序排序
将数组中的每个数据,两两比较,如果前面的数字大就将两个数字进行交换。
算法描述:
-
要进行多轮比较
-
每一轮比较时,将相邻的两个数据进行比较,将较大的交换到后面
算法分析:
-
外层循环控制比较轮数(长度-1)
-
内层循环控制前后两个数的比较次数(长度-1-轮数)
-
在内层循环中将相邻的两个数据进行比较,将较大的交换到后面
//外层循环控制比较的轮数
for(int i = 0;i < numbers.length - 1;i++){
//内层循环控制前后两个数的比较次数(长度-1-轮数)
for(int j = 0;j < numbers.length - 1 - i;j++){
//在内层循环中将相邻的两个数据进行比较,将较大的交换到后面
if(numbers[j] > numbers[j+1]){
int temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
将数组中的最大数据和第一个数据交换,
将第二大数据和第二个数据交换
…
算法描述:
-
分为多轮
-
每次取得该轮中最大(小)值的位置和前面一个数据进行交换
算法分析:
-
外层循环控制轮数(长度-1)
-
内层循环控制找最小值位置(范围:轮数~长度-1)
-
将最小值的数据和该轮的第一个数进行交换
//外层循环控制轮数(长度-1)
for(int i = 0;i < numbers.length - 1;i++){
//保存该轮的第一个数的位置为最小值的位置
int min = i;
//内层循环控制找最小值位置(范围:轮数~长度-1)
for(int j = i;j < numbers.length;j++){
//找最小值的位置
if(numbers[j] < numbers[min]){
min = j;
}
}
//将最小的数据和该轮的开始位置交换
if(min != i){
int temp = numbers[min];
numbers[min] = numbers[i];
numbers[i] = temp;
}
}
二分查找只能用于有序数组,效率更高
总结
三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。
- 第一个是算法
关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。
而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本
《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题
《算法的乐趣》共有23个章节:
- 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)
基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)
- 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)
]
- 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)
基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)
[外链图片转存中…(img-BsXm4KvP-1714349413558)]
- 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)
[外链图片转存中…(img-R56TjivC-1714349413559)]