网易游戏--工具开发工程师(一面)

网易游戏--工具开发工程师(一面)

面试时间一共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

posted @ 2021-04-09 11:09  大杂烩不是一道菜  阅读(136)  评论(0)    收藏  举报