字节面试算法题

某个公司的一道题目
想瞅瞅代码
给定一个数n,如23121,给定一个数组,如2 4 9,求由数组元素组成的,小于23121的最大数为22999
数组和数n都是随机的
想问问怎么写
#字节##字节跳动##笔试题目#
全部评论
试探回溯法就行,找到所有数,选出小于n的最大数就行了,复杂度没提要求应该能过; public class Main { public static void main(String[] args) { int n=23121; int[] array=new int[] {2,4,9}; System.out.println(find(n, array)); }     public static int find(int n, int[] array) {      int depth=0;      List<Integer> list=new ArrayList<>();      int path=0;      char[] digits=Integer.toString(n).toCharArray();      dfs(n, depth, digits, array, path, list);      int result=0;      Collections.sort(list);      for(int i=0;i<list.size();i++) {      if(list.get(i)>=n) {      result=list.get(i-1);      break;      }      }      return result;     }          public static void dfs(int n, int depth, char[] digits, int[] array, int path, List<Integer> list) {      if(depth==digits.length) {      list.add(path);      return;      }      for (int i = 0; i < array.length; i++) { path = path * 10 + array[i]; dfs(n, depth + 1, digits, array, path, list); path = path / 10; } } }
1 回复 分享
发布于 2022-04-24 08:32
将数组排序 n转字符串 从左到右遍历n 对于每一位在数组中二分查找 如果位存在于数组中则选择并继续下一位 否则选择小于该位的最大值并且对与后面的位全部填充数组最大值
点赞 回复 分享
发布于 2022-04-24 08:14
字节一面遇到了,讲了模拟思路没写出来
点赞 回复 分享
发布于 2022-04-24 10:13
不用回溯,将给定的数组排序(理论上不用排序On时间复杂度),得到数组中的最大值和最小值。然后从给定数字的个位到高位遍历,直到找到第一个大于数组min的位。如果没有找到,答案就是原数字长度-1个数组最大值的拼接;如果找到了,找到那一位的更高位都不变,找到的那一位变成数组中小于它的最大值,然后比当前低的位用数组里面的最大值max替换即可。
点赞 回复 分享
发布于 2022-04-24 11:05
双指针可以考虑的
点赞 回复 分享
发布于 2022-04-28 10:30
#include<bits/stdc++.h> using namespace std; int main(){ int n=23121,m ; //cin>>n; vector<int>a={2,4,9},b,c; /*while(cin>>m){ a.push_back(m); }*/ sort(a.begin(),a.end()); while(n/10){ c.push_back(n%10); n/=10; } c.push_back(n); int target=0; for(int i=c.size()-1;i>=0;i--){ if(target==1){ b.push_back(a.back()); continue; } for(int j=0;j<a.size();j++){ if(c[i]==a[j]){ b.push_back(c[i]); break; } if(c[i]>a[j]){ b.push_back(a[j]); target=1; break; } } } int sum=0; for(int i =0;i<b.size();i++){ sum+=b[i]*pow(10,b.size()-i-1); } cout<<sum<<endl; }
点赞 回复 分享
发布于 2022-05-16 23:50

相关推荐

在几乎没有任何准备的情况下收到了面试邀请,紧急准备了两三天,虽然没出结果但是应该要寄了qaq由于种种原因,本来预计一小时的面试只用了半小时。1&nbsp;自我介绍2&nbsp;网络的七层模型是哪七层3&nbsp;进程和线程区别4&nbsp;udp和tcp区别5&nbsp;项目介绍,简要介绍一下项目中的内容,并没有深挖,只是让我自己挑了一个介绍一下,然后问我这个项目是不是毕业设计,答:只是课程期末作业6&nbsp;关于死锁的内容,由于我说正在学,跳过了7&nbsp;链表和数组的区别8&nbsp;python中常见的数组结构9&nbsp;关于栈的特点10&nbsp;队列的特点11&nbsp;测试用例设计,三八妇女节抖音直播各省份分区,每个省份主播收取礼物排名,并在时间截止时结榜,各赛区前三名发放奖励。感觉答得不够好,面试官有在尽力提醒我了,奈何自己知识储备实在不行,可以明显感觉到面试官的无奈12&nbsp;测试用例设计,给出查询主播排名的函数,给主播加积分的函数,以及另一个函数,具体做什么的忘了,然后验证主播的排名是否正确。这个答得更差,感觉面试官已经彻底无语了13&nbsp;算法&nbsp;leetcode题目88,合并两个有序数组,答用双指针方法,这个其实答得还不错,毕竟面试前一直在准备,不过漏掉了边界情况,面试官提示后也答出来了。不过最后的时间复杂度和空间复杂度答错了,时间复杂度经提醒后改过来了,空间复杂度没答出来。但是由于用的是平板面试,所以没有手撕代码,只是说了下思路,不知道会不会因为这个扣分。14&nbsp;反问&nbsp;问实习是否有人带领。以及有无转正机会总结来说,对自己的表现很不满意,因为面试前着重在准备算法题,一直在刷leetcode,导致八股题目几乎没有几个完全答出来的,甚至好几个一点都说不出来,也可以明显感觉出面试官的无奈和无语。好像还有一道题问的是什么协议,以及一个异常测试的测试用例,要怎么排查异常。记不清了,反正大概率是没了。#牛客AI配图神器#
查看13道真题和解析
点赞 评论 收藏
分享
查看18道真题和解析 面试常问题系列
点赞 评论 收藏
分享
评论
1
24
分享

创作者周榜

更多
牛客网
牛客企业服务