网易游戏--工具开发工程师(一面)
网易游戏--工具开发工程师(一面)
面试时间一共60分钟,面试官引导的很好,很尊重人,主要了以下问题,写下来供大家参考:
1.自我介绍
2.本科的课程
3.研究生的课程、课题(具体一点)
4.项目经历
5.数据库会用哪些(具体涉及到哪些操作)
6、zookeeper的应用场景(是如何处理分布式数据的,要具体一点)
7、Redis的应用场景、支持那些数据结构?做队列的话需要用到那个数据结构、如何实现?
8、本科及研究生期间的挂科情况以及排名
9、非课程的自学能力(技术方面)
10、假设你在浏览器中输入一个网址,按下回车会发生什么?
11、假设你是一个快递员,双十一包裹积压很多,你有什么办法可以提升派送的效率?(发散型题目)
12、手撕代码:题目
在环形有序数组中查找给定数。例如:在[6, 7, 8, 1, 2, 3, 4, 5]中找到3,数组长度无限。返回下标。
思路
环形有序数组就是说本来一有序数组,现在将有序数组一份为二,左右两部分交换顺序,例如[6, 7, 8, 1, 2, 3, 4, 5]。刚开始的思路是首先找到断点,for遍历数组,如果后面的元素比前面小,说明存在断点处,比如1比8小。这里的问题是数组长度无限,如果断点位置靠后,就很花费时间,所以时间复杂度不高。
改进的思路,一般有序数组用二分法查找比较有效率,所以这里也可以借助二分查找思想。如果查找到的中间元素恰好等于目标值,则直接返回下标。否则,将中间元素与左端点值比较,如果左端点小于中间元素,且目标值在两者中间,则说明断点在右边,结果直接在左边查找就行。
Python 代码:
def cycleSearch(nums, target):
l, r = 0, len(nums) - 1
while l <= r:
mid = int((l + r) / 2)
if target == nums[mid]:
return mid
if nums[l] <= nums[mid]:
if nums[l] <= target < nums[mid]:
r = mid - 1
else:
l = mid + 1
else:
if nums[l] >= target > nums[mid]:
l = mid + 1
else:
r = mid - 1
return -1
Java代码:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//存放数组大小
boolean n=sc.hasNextInt();
int[] nums=new int[n];//存放数组
for (int i = 0; i < n; i++) {
nums[i]=sc.nextInt();
}
int target=sc.nextInt();//存放目标值
int l=0,r=nums.length-1;
int m=-1;
while(l<=r){
int mid=(l+r)/2;
if(nums[mid]==target){
m=mid;
}
if(nums[l]<=nums[mid]){
if(nums[l]<=target && nums[mid]>target){
r=mid-1;
}else{
l=mid+1;
}
}else{
if(nums[l]>=target && nums[mid]<target){
l=mid+1;
}else{
r=mid-1;
}
}
}
System.out.println(m);
}
}
————————————————
版权声明:本文为CSDN博主「turbo624」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44110891/article/details/106738091

浙公网安备 33010602011771号