四个编程题总体算比较简单,基本都在LeetCode出现过。但是我的速度太慢了,还要加油啊ヾ(◍°∇°◍)ノ゙
牛客快手2020校园招聘秋招笔试–算法B试卷

合法数独

给定一个数独板的输入,确认当前的填法是否合法。
合法的输入需要满足以下三个条件:

  1. 每一行的9个格子中是1-9的9个数字,且没有重复
  2. 每一列的9个格子中是1-9的9个数字,且没有重复
  3. 9个3*3的小格子中是1-9的9个格子,且没有重复
    :开始意思弄错了判断的是能不能填满81个数,烂费了好多时间。结果是只要判断当前的,就很难受。
    set判断当前值,不包含则加入当前值,包含代表重复,则返回false
obj.dfs(s,0,0);
System.out.println(obj.answer);
判断81个能否都填满。
 import java.util.*;public class Main {boolean answer = false;private boolean get(char str[][]){ for (int x=0;x<9;x++){Set<Character> set = new HashSet<>();for (int y = 0; y < 9; y++) {if (str[x][y] != 'X' && !set.contains(str[x][y]))set.add(str[x][y]);else if(set.contains(str[x][y]))return false;}}for (int x=0;x<9;x++){Set<Character> set = new HashSet<>();for (int y = 0; y < 9; y++) {if (str[y][x] != 'X' && !set.contains(str[y][x]))set.add(str[y][x]);else if(set.contains(str[y][x]))return false;}}for (int x=0;x<3;x++){for (int y=0;y<3;y++){Set<Character> set = new HashSet<>();for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if(str[x*3+i][y*3+j]!='X' && !set.contains(str[x*3+i][y*3+j]))set.add(str[x*3+i][y*3+j]);else if(set.contains(str[x*3+i][y*3+j]))return false;}}}}return true;}public static void main(String[] args) {Main obj = new Main();String []mm=new String[9];char[][] s= new char [9][9];Scanner scanner = new Scanner(System.in);for (int i = 0; i < 9; i++) {mm[i]=scanner.nextLine();for (int j = 0; j < 9; j++) {s[i][j]=mm[i].charAt(j) ;}}//            obj.dfs(s,0,0);
//            System.out.println(obj.answer); System.out.println(obj.get(s));}private void dfs(char [][] str,int x,int y){if (y==9){x++;y=0;}if(x>8){this.answer=true;return  ;}while (x<=8){if(str[x][y]=='X')break;y++;if (y==9){x++;y=0;}if(x>8){this.answer=true;return  ;}}Set<Character> set = new HashSet<>();for (int i = 1; i <= 9; i++) set.add((char)(i+'0'));for (int i = 0; i < 9; i++) {if (str[i][y] != 'X' && set.contains(str[i][y]))set.remove(str[i][y]);}for (int i = 0; i < 9; i++) {if (str[x][i] != 'X' && set.contains(str[x][i]))set.remove(str[x][i]);}int x1=x/3 * 3,y1=y/3 * 3;for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (str[x1+i][y1+j] != 'X' && set.contains(str[x1+i][y1+j])) {set.remove(str[x1 + i][y1 + j]);}}}for (Character character : set){str[x][y]=character;dfs(str,x,y+1);str[x][y]='X';}return ;}
}

分解质因数

我们知道每一个大于1的整数都一定是质数或者可以用质数的乘积来表示,如10=25。现在请设计一个程序,对于给定的一个(1,N] 之间的正整数(N取值不超过10万),你需要统计(1,N] 之间所有整数的质数分解后,所有质数个数的总个数。举例,输入数据为6,那么满足(1,6] 的整数为2,3,4,5,6,各自进行质数分解后为:2=>2,3=>3,4=>22,5=>5,6=>2*3。对应的质数个数即为1,1,2,1,2。最后统计总数为7
输入描述:
输入数据包含1行,为一个大于1的整数(不超过10万)。
输出描述:
输出小于等于该数的所有整数质数分解后的总个数。
示例1
输入

6

输出

7

:肯定有更好的方法不过我是暴力的…当时当算超时了就直接往数组存打出来的质数,然后优化后面的找质因子的代码,好结果都没必要,可能100000太小了把。

public class Main {public static void main(String[] args) {List<Integer> set = new ArrayList<>();for (int i = 2; i < 100000; i++) {int flag=0;for (int j = 2; j <= (int)Math.sqrt(i); j++) {if(i%j==0) {flag=1;break;}}if(flag == 0)set.add(i);}int n = 100000,sum=0;Scanner scanner = new Scanner(System.in);n=scanner.nextInt();scanner.close();for (int i=2;i<=n;i++){int ii=i;while (ii!=1){for (Integer a: set){if(ii%a==0){ii/=a;sum++;break;}if(a>ii)break;}}}System.out.println(sum);}
}

Levenshtein distance

已知两个字符串strA和strB,求将strA转换成strB所需的最小编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
输入描述:
任意字符串strA和strB,其中第一行为strA,第二行为strB
输出描述:
最小编辑操作次数
示例1
输入

FreshMeat
FishAndMeat

输出

 5

: 演算找出规律(说起来轻松做起来难o(╥﹏╥)o)
1 当前字符相等strA[j] 等于 strB[i] ,则当前dp值为左上角dp值
2 字符不等,左dp值 != 上dp值, 当前dp值为min(左dp,上dp)+1
3 字符不等,左dp值 等于 上dp值, 当前dp值为 左上角dp值 +1 此种容易想错

// FreshMeat
// FishAndMeat
// 0 1 2 3 4 5 6 7 8 9
// 1 0 1 2 3 4 5 6 7 8
// 2 1 1 2 3 4 5 6 7 8
// 3 2 2 2 2 3 4 5 6 7
// 4 3 3 3 3 2 3 4 5 6
// 5 4 4 4 4 3 3 4 5 6
// 6 5 5 5 5 4 4 4 5 6
// 7 6 6 6 6 5 5 5 5 6
// 8 7 7 7 7 6 5 6 6 6
// 9 8 8 7 8 7 6 5 6 7
// 10 9 9 8 8 8 7 6 5 6
// 11 10 10 9 9 9 8 7 6 5

public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String strA = scanner.nextLine();String strB = scanner.nextLine();scanner.close();int up=0,down=0;int lenA = strA.length();int lenB = strB.length();int dp[][]=new int[lenB+1][lenA+1];dp[0][0]=0;for (int i = 0; i <= lenB; i++) dp[i][0]=i;for (int i = 0; i <= lenA; i++) dp[0][i]=i;for (int ii = 1; ii <= lenB; ii++) {int i=ii-1;for (int jj=1;jj<=lenA;jj++){int j=jj-1;if(strB.charAt(i) == strA.charAt(j)){dp[ii][jj]=dp[i][j];// 相等为左上角dp}else if(dp[ii][j] == dp[i][jj]){dp[ii][jj]=dp[i][j]+1;//上方的值 == 左方的值 当前值=左上值+1}else {//上方的值 != 左方的值 当前值=min(左值,上值)+1dp[ii][jj]=Math.min(dp[ii][j],dp[i][jj])+1;}}}System.out.println(dp[lenB][lenA]);}
}

单词反转

输入一个英文句子, 词之间有1个或者若干个空格,句子以英文标点".“结尾。
要求颠倒该句子中的词语顺序,并且词之间有且只有一个空格,结尾仍然是”.",结尾的"."与前一个单词之间无空格。
输入描述:

I     love   you  .

输出描述:

you love I.

示例1
输入

 I  love     you.

输出

you love I.

题目本意应该是双指针遍历,不过有api(逃)

public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String a = scanner.nextLine();int flag = 0;for (int i=a.length()-1;i>=0;i--){if(a.charAt(i) == '.'){a=a.substring(0,i );break;}}String b="";String str[]=a.trim().split(" +");for(int i=str.length-1;i>0;i--){b=b+str[i]+" ";}b=b+str[0]+".";System.out.println(b);}
}

快手2020校园招聘秋招笔试--算法B试卷相关推荐

  1. 快手2020校园招聘秋招笔试--算法C试卷 练习 解题报告 Apare_xzc

    快手2020校园招聘秋招笔试–算法C试卷 解题报告 Apare_xzc 2020/4/10 网页链接:牛客链接 题型分布: 选择题(2分/道*20道)         编程题(15分/道*4道) 选择 ...

  2. 【2020算法练习一】笔试算法题 快手2020校园招聘秋招笔试--算法A试卷

    1.求解一元一次方程的正整数解 解方程在线做题 输入描述: 输入一行表示该一元一次方程,其中未知数为X,方程包含加法.减法.乘法. 字符串长度少于20个字符,保证为合法方程. 所有整数绝对值不超过10 ...

  3. 【2020算法练习一】笔试选择题 快手2020校园招聘秋招笔试--算法A试卷

    郁闷一天(毫无原因的郁闷)吐个槽-- 嗷嗷嗷嗷嗷哦嗷嗷嗷嗷嗷哦嗷嗷!嗷嗷,嗷嗷嗷嗷,嗷嗷嗷嗷嗷哦啊呜呜呜呜-- 今天又是因为疫情没课又很闲还不能找小伙伴玩的一天,又不想干活写毕设,所以真的很烦.所以做 ...

  4. 【牛客】快手2020校园招聘秋招笔试--算法A试卷

    链接:https://www.nowcoder.com/questionTerminal/c8cfc98711a14a3fbc587ca5aabc09ee 来源:牛客网 [编程题]计算累计平方和. 热 ...

  5. 快手2020校园招聘秋招笔试--工程B试卷 订正

    1.三种攻击 DNS欺骗攻击:冒充域名 把原来查询的IP改为其他IP ddos攻击:大量合法的服务器向某一目标不断发送请求,导致其他用户无法使用 SYN Flooding攻击:攻击者使用无效IP地址 ...

  6. 快手2020校园招聘秋招笔试--工程C试卷

    1. 关于java的异常处理机制,以下说法正确的是: A. 当某个线程抛出OutOfMemoryError时,其他线程有可能不受影响 B. 当大量抛出RuntimeException时,不会影响系统的 ...

  7. 快手2020校园招聘秋招笔试--工程B试卷

    攻击者使用无效IP地址,利用TCP连接的三次握手过程,连续发送会话请求,使受害主机处于开放会话的请求之中,直至连接超时,最终因耗尽资源而停止响应.这种攻击被称为 A. DNS欺骗攻击 B. DDoS攻 ...

  8. 快手2020校园招聘秋招笔试--工程C试卷 (编程题题解全)

    1.病毒检测 滑动窗口题 例子: 2 0101010(第一位下标为1) 1)找到第一个最短的满足k条件的子串,即s[2~4],l=2,r=4 2)找出这个子串左右连续的0的个数,分别为a,b,则对于这 ...

  9. 快手2020校园招聘秋招笔试--工程A试卷 (编程题题解全)

    "好序列"的个数 反着求,先求出所有序列个数,再减去不符合的个数. 黑边把图分成一个,一个的连通分量. 所以我们只要用dfs求出每个不包含黑边的连通分量的包含点个数sz,sz^k就 ...

最新文章

  1. 《C++游戏编程入门(第4版)》——1.8 Lost Fortune简介
  2. multiple Rational objects
  3. c/c++常见面试题
  4. 长沙,企业上市“再加速”
  5. 一般纳米材料是指尺度为_纳米材料及纳米材料在高分子领域的应用
  6. 如何在Outlook 2013中管理附件
  7. 最新!复旦大学邱锡鹏教授等「Transformers全面综述」论文
  8. 【MySQL】MySQL 8 IDEA连接本地MySQL报错 Host DESKTOP-MISSMJIJ is not allowed to connect to this serv
  9. linux acl库编译与使用,linux的ACL-rds数据删除了可恢复吗?-WinFrom控件库|.net开源控件库|HZHControls官网...
  10. python 特殊字符作为分割行 调整非时间开头格式
  11. Netty in action—codec框架
  12. Go语言实战+code
  13. python动态数据类型_[python学习手册-笔记]004.动态类型
  14. 怎么删除映射网络里的计算机,如何映射网络驱动器 删除映射网络驱动器的方法...
  15. 基于Javaweb的机房预约管理系统
  16. 【数学与统计基础】常用统计检验方法的Python实现
  17. 【牛客网-公司真题-前端入门篇】——百度2021校招Web前端研发工程师笔试卷(第二批)
  18. js 数字不足位数补0
  19. JavaScript实现:抽奖活动
  20. 云硬盘(Elastic Volume Service,EVS)

热门文章

  1. win10搜索计算机中所有excel,win10系统用excel表格查找和替换功能的操作方法
  2. Unity 之 解决包体过大问题记录和纹理相关知识点整理
  3. 【功能测试05-熟悉tpshop项目】
  4. 12.区块链系列之比特币NFT
  5. 小数点化分数的过程_分数和小数互化教学评语
  6. 微信小程序开店怎么做?
  7. 高端生活变革之路:“速食文化”到“独享宴会”
  8. Unity Shader Early-Z技术
  9. 华为怎么分屏操作技巧_第五人格魔术师怎么操作 求生者魔术师操作技巧
  10. C语言:输入某一年的第几天,计算并输出它是这一年的第几月第几日?