2023暑假实习美团效率部门面试题分享

1.给一个链表,翻转指定区间的数,其他不变,要求原位翻转;

【1,2,3,4,5】2,3

【1,3,2,4,5】

平时喜欢新建一个结果对象,没有怎么写过原位翻转,慌了;

重点:定位m,n,翻转,原来的剩下的不翻转的拼接回去,这个很关键;

当时换了while里没有i++,末尾的也没拼回去。下来又做了,如下:

import java.util.*;
class  ListNode{
    int  val;
    ListNode next;
    ListNode(int i){
        this.val=i;
        this.next=null;
    }
   
    @Override
    public String toString() {
        ListNode p=this;
        List<Integer> res=new ArrayList<>();
        while(p!=null){
            res.add(p.val);
            p=p.next;
        }
        return res.toString();
    }
}
public class Main2 {
    
    private static ListNode reverse(ListNode root,int m,int n){
        ListNode dummy=new ListNode(-1);
        dummy.next=root;
        ListNode pre=dummy;
        ListNode p=root;
        int i=1;
        while(i!=m){
            pre=pre.next;
            p=p.next;
            i++;
        }
        ListNode tail=p;
        while(i<=n){
            ListNode temp=p;
            p=p.next;
            temp.next=pre.next;
            pre.next=temp;
            i++;
        }
        tail.next=p;//拼接回去
        return dummy.next;

    }
    public static ListNode getListNdoe(int[] arr){
        int i=1;
        ListNode temp=new ListNode(arr[0]);
        ListNode p=temp;
        while(i<arr.length){
            p.next=new ListNode(arr[i]);
            p=p.next;
            i++;
        }
        return temp;
    }
    public static void main(String[] args) {
        ListNode root=getListNdoe(new int[]{1,2,3,4,5});
        System.out.println(root.toString());
        ListNode res=reverse(root,1,4);
        System.out.println(res.toString());
    }
}

2.路径求和,求树从根到叶子结点的每一条路径说组成的数的和

1

2 3

12+13=25

当时是回溯里忘了return;开始时没判空。也没加root值。修改如下:

import java.util.*;
class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val){
        this.val=val;
        this.left=null;
        this.right=null;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        if(this==null){
            return "null";
        }
        return String.valueOf(this.val)+this.left.toString()+this.right.toString();
    }
}
public class Main3 {
    static int res=0;
    public static void main(String[] args) {
        TreeNode root=new TreeNode(1);
        root.left=new TreeNode(2);
        root.right=new TreeNode(3);
        root.left.left=new TreeNode(4);
        if(root==null){
            System.out.println(0);
            return;
        }
        StringBuffer sb=new StringBuffer();
        sb.append(String.valueOf(root.val));//开始添加
        trace(root,sb);
        System.out.println(res);
    }
    private static void trace(TreeNode root,StringBuffer sb){
        if(root.left==null && root.right==null){
            res+=Integer.valueOf(sb.toString());
            return;//回溯返回忘了
        }
        List<TreeNode> temp=new ArrayList<>();
        if(root.left!=null){
            temp.add(root.left);
        }
        if(root.right!=null){
            temp.add(root.right);
        }
        for(TreeNode t:temp){
            sb.append(String.valueOf(t.val));
            trace(t, sb);
            sb.deleteCharAt(sb.length()-1);
        }

    }
    
}

 其他的都项目场景题

紧张了,while里i++都忘了。return也没写,同一个文件只有一个piblic class也忘了,题还是简单的

#美团2023面经##后端研发岗##如何判断面试是否凉了##23届找工作求助阵地##我的实习求职记录#
全部评论
这时间空间复杂度都是多少?
1 回复 分享
发布于 2023-03-24 13:51 江苏
代码有点长,还能优化一下
点赞 回复 分享
发布于 2023-03-24 14:30 天津

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
2 11 评论
分享
牛客网
牛客企业服务