阿里笔试8.9

投票啦#阿里巴巴笔试##阿里巴巴#
全部评论
第二题直接随机输出yes和no , 骗了20%,笑死
5 回复
分享
发布于 2021-08-09 20:32
AC了 第一题前缀和保存在列表里,对1到L的每个n判断:遍历列表中的每个前缀和prefix, prefix+n在不在列表里; 第二题 初始化root之后建树,再之后递归判断每个节点的isBalance() ,也挺简单的。 // 建树 static TreeNode build(TreeNode root, int val){         if(root == null) return new TreeNode(val);         if(root.val > val) root.left = build(root.left, val);         else root.right = build(root.right, val);         return root;     } // 判断 static boolean isBalance(TreeNode root, int N){         if(root == null) return true;         int left = 0, right = 0;         TreeNode node = root;         while(node.left != null){             node = node.left;             left++;         }         node = root;         while (node.right != null){             node = node.right;             right++;         }         return Math.abs(left - right) <= Math.min(11, N) && isBalance(root.left, N) && isBalance(root.right, N);     }
4 回复
分享
发布于 2021-08-09 20:44
联易融
校招火热招聘中
官网直投
第一题0.6第二题0.2
2 回复
分享
发布于 2021-08-09 20:15
今天的机试感觉比前几次的简单啊,a了两道
2 回复
分享
发布于 2021-08-09 20:56
第一题测试用例都过,就是AC 0%😅
点赞 回复
分享
发布于 2021-08-09 20:19
第二题是要根据序列重建一颗二叉排序树再分别计算左右结点的深度嘛 后面时间不够了 没写出来重建二叉树 还是有其他的方法😂
点赞 回复
分享
发布于 2021-08-09 20:19
第一题怎么找连续区间啊,有人能解答一下吗
点赞 回复
分享
发布于 2021-08-09 20:19
第二题,0.2,将数组排序后,构建二叉排序树,然后对树中的每个节点进行判断,是否满足题意,不知道哪里出了问题。感觉没错啊             Arrays.sort(res);         //将排序数组转化成二叉排序树             TreeNode root=arrayToTreeNode(res,0,res.length-1);             if (root==null){                 System.out.println("NO");             }else{                 Queue<TreeNode> queue=new LinkedList<>();                 queue.add(root);                 boolean flag=true;                 int n=res.length;                 int temp=Math.min(11,n/2);                 while (!queue.isEmpty()){                     TreeNode cur=queue.poll();                     if (!Ablance(cur,temp)){                         flag=false;                         break;                     if (cur.left!=null){                         queue.add(cur.right                     if (cur.right!=null){                         queue.add(cur.right)                 if (flag){                     System.out.println("YES");                 }else{                     System.out.println("NO")
点赞 回复
分享
发布于 2021-08-09 20:27
第二个写二叉树太费时间了==
点赞 回复
分享
发布于 2021-08-09 20:27
    public static int digui(List<Integer> tree, int n, boolean t){         if(tree.isEmpty()){             return 0;         }         List<Integer> left = new ArrayList<>();         List<Integer> right = new ArrayList<>();         int root = tree.get(0);         int length = tree.size();         for(int i = 1; i < length; i++){             int cur = tree.get(i);             if(cur < root){                 left.add(cur);             }else{                 right.add(cur);             }         }         int leftN = digui(left, n, true);         int rightN = digui(right, n, false); //        int height = Math.max(leftN, rightN) + 1;         if(Math.max(leftN, rightN) - Math.min(leftN, rightN) >= n || leftN == -1 || rightN == -1){             return -1;         }else{             if(t){                 return leftN + 1;             }else{                 return rightN + 1;             }         }     } 第二题核心代码这样写的,不知道哪里错了,完整代码在我帖子里,有大佬可以看看嘛?
点赞 回复
分享
发布于 2021-08-09 20:35
差了五分钟写出来的,不知道思路对不对,不用建树,把数组导入队列,比头节点小的导入左队列,大的放入右队列,对两个队列递归求出深度,判断是否满足a-balance,不知道这么考虑是否有问题。int  judge(queue<int>& q,int n) { if (q.size() == 0) return 0; int temp = q.front(); q.pop(); queue<int> left; queue<int> right; while (!q.empty()) { int t = q.front(); if (t > temp) { right.push(t); q.pop(); } else { left.push(t); q.pop(); } } int l = judge(left, n); int r = judge(right, n); if (l == -1 || r == -1) return -1; if (abs(r - l) > min(11, n)) return -1; else return max(l, r) + 1; } int main() { int group; cin >> group; while (group--) { int n; cin >> n; vector<int> array(n); queue<int> q; for (int i = 0; i < n; i++) { cin >> array[i]; q.push(array[i]); }  if(judge(q, n)!=-1)                          cout<<"yes"<<endl; }
点赞 回复
分享
发布于 2021-08-09 20:40
阿里编程题可以跳出界面用本地idea吗?
点赞 回复
分享
发布于 2021-08-09 21:19
第一题感觉很简单,全A,就是读题意花了快10分钟。第二题,感觉不难,但是还要自己创建二叉树有点蛋疼,最后来不及了,骗了20%😂
点赞 回复
分享
发布于 2021-08-09 21:20
有大佬可以说一下第二题的大概题意么
点赞 回复
分享
发布于 2021-08-09 21:30
第二题 t = int(input()) for _ in range(t):     n = int(input())     nums = list(map(int, input().split()))     def dfs(nums):         if len(nums) <= 1:             return True         root = nums[0]         left = []         right = []         for num in nums[1:]:             if num > root:                 right.append(num)             else:                 left.append(num)         Abs = abs(get_left([root]+left) - get_right([root]+right))         return dfs(left) and dfs(right) and Abs < ban     def get_left(nums):         c = 0         tmp = nums[0]         for num in nums[1:]:             if num<tmp:                 c += 1                 tmp = num         return c     def get_right(nums):         c = 0         tmp = nums[0]         for num in nums[1:]:             if num>tmp:                 c += 1                 tmp = num         return c     ban = min(11, n//2)     if dfs(nums):         print("YES")     else:         print("NO")
点赞 回复
分享
发布于 2021-08-09 22:44
1.2简历直接给我挂了
点赞 回复
分享
发布于 2021-08-11 10:45
😥第一题a了96%,给我气的
点赞 回复
分享
发布于 2021-08-16 11:07

相关推荐

头像
不愿透露姓名的神秘牛友
03-13 14:57
点赞 评论 收藏
转发
2 3 评论
分享
牛客网
牛客企业服务