一、字符串变形

输入两个字符串a和b,a的长度小于b的长度。现在可以在a中的每个位置插入任意字符,使得最终a的长度等于b的长度,问最后a和b中对应位置字符不同的位置的个数。

这个问题可以看做是:带约束的最长公共子序列
考虑形如abcx 和ayybc的两个字符串,第一个字符串不能添加太多字符,否则会导致它的长度太长。当a[i]=b[j]时,i必须不能大于j,否则a[i]是不可能等于j的。

这道题测试样例过于简单,以至于很多错误解法也能全部通过。

import java.util.Scanner;public class Main {
Main() {Scanner cin = new Scanner(System.in);char[] a = cin.next().trim().toCharArray(), b = cin.next().trim().toCharArray();int[][] m = new int[a.length][b.length];for (int i = 0; i < a.length; i++) {for (int j = 0; j < b.length; j++) {if (i > 0) m[i][j] = Math.max(m[i - 1][j], m[i][j]);if (j > 0) m[i][j] = Math.max(m[i][j - 1], m[i][j]);if (a[i] == b[j] && a.length - i <= b.length - j && i <= j) {int last = 0;if (i > 0 && j > 0) last = m[i - 1][j - 1];m[i][j] = Math.max(m[i][j], last + 1);}}}int common = m[a.length - 1][b.length - 1];int add = b.length - a.length;
//    System.out.println(common);int ans = b.length - common - add;System.out.println(ans);
}public static void main(String[] args) {new Main();
}
}

二、概率+动态规划

N个人,M个礼品,每个礼品的个数为C[i],第i个人选择第j个礼品的概率为p[i][j],当发放礼品时,N个人一次性确定好自己要什么礼品,然后按照顺序一次发放,若某种类型的礼品没了,就不给要这个礼品的人发了。因为礼品个数有限,问期望有多少人能够拿到礼品。

关键在于明白问题转化:期望拿到礼品的人数=每种礼品期望发给的任务。因为人和礼品之间时一一对应的。
定义数组f[M][N],f[i][j]表示第i种礼品被要求次数为j的概率,N从0~N递增推导就可以得到最终矩阵,这个过程相当于滚动数组形式的动态规划。

import java.util.Scanner;public class Main {
int N, M;
int[] c;
double p[][];
double left[][];Main() {Scanner cin = new Scanner(System.in);N = cin.nextInt();M = cin.nextInt();c = new int[M];p = new double[N][M];for (int i = 0; i < M; i++) {c[i] = cin.nextInt();if (c[i] > N) c[i] = N;}for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) p[i][j] = cin.nextDouble();left = new double[M][N + 1];for (int i = 0; i < left.length; i++) left[i][0] = 1;for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {for (int k = N; k >= 0; k--) {left[j][k] = left[j][k] * (1 - p[i][j]);if (k > 0) {left[j][k] += left[j][k - 1] * p[i][j];}}}}double s = 0;for (int i = 0; i < M; i++) {for (int j = 0; j <= N; j++) {s += left[i][j] * Math.min(c[i], j);}}System.out.printf("%.1f", s);
}public static void main(String[] args) {new Main();
}
}

三、数组排序:贪心

一个无序数组,每次只能执行一种操作:把任意一个元素移动到末尾。问最少经过多少次操作能够使得数组变得有序。

对于元素x,只要它后面有比它小的元素,它就必然要被挪到最后去。而对于需要挪到最后去的一批元素,必然是优先移动比较小的那些元素,这样才能保证它们尽量靠前。

import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.stream.Collectors;public class Main {
Main() {Scanner cin = new Scanner(System.in);int N = cin.nextInt();int[] a = new int[N];for (int i = 0; i < N; i++) a[i] = cin.nextInt();int s = 0;while (true) {LinkedList<Integer> left = new LinkedList<>();LinkedList<Integer> right = new LinkedList<>();int mi = Integer.MAX_VALUE;for (int i = a.length - 1; i >= 0; i--) {if (mi < a[i]) {right.add(a[i]);} else {left.add(a[i]);}mi = Math.min(mi, a[i]);}right.sort(Comparator.comparing(x -> x));s += right.size();if (right.size() == 0) break;int ai = 0;for (int i : left) a[N - 1 - right.size() - (ai++)] = i;for (int i : right) a[ai++] = i; }System.out.println(s);
}public static void main(String[] args) {new Main();
}
}

转载于:https://www.cnblogs.com/weiyinfu/p/9508954.html

2018摩拜算法工程师笔试题相关推荐

  1. 数据分析真题日刷 | 京东2018秋招数据分析工程师笔试题

    今日真题 京东2018秋招数据分析工程师笔试题(来源:牛客网) 题型 客观题:单选18道,不定项选择12道 主观题:编程2道 完成时间 120分钟 牛客网评估难度系数 3颗星 写到「数据分析真题日刷」 ...

  2. 名企笔试:京东 2016 算法工程师笔试题(登楼梯)

    名企笔试:京东 2016 算法工程师笔试题(登楼梯) 2017-02-04 算法爱好者 有一段楼梯台阶有 15 级台阶,以小明的脚力一步最多只能跨 3 级,请问小明登上这段楼梯,有多少种不同的走法? ...

  3. 【数据挖掘】2022年昆仑万维 算法工程师笔试题

    [数据挖掘]2022年昆仑万维 算法工程师笔试题 企业:昆仑万维 1 单选题 1.ABCDE,出栈的顺序不可能是? 栈的知识 2.连续投硬币,第一次正面,奇数次A赢,偶数次B赢.则A赢的概率是多少 问 ...

  4. 【数据挖掘】2022年京东算法工程师笔试题(23届)

    时间:90分钟 2022年京东算法工程师笔试题(23届) 1 单选题 1.MySQL内部存储代码的优势 服务器上执行还可以节省带宽和网络延迟 代码重用.可以方便的统一业务规则,保证某些行为的一致性,所 ...

  5. 京东2019春招算法工程师笔试题-牛牛下象棋(编程题3)

    这次京东2019的春招算法工程师笔试时间是2018-04-09 19:00~21:00,其中有三道编程题目,当时就做了2个,后一个时间原因就没做,就截了一个图,今天又突然看到了,练练手吧哈. 题目要求 ...

  6. 【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题

    岗位:高级机器学习算法工程师 笔试时间:2022-9-28 1 简答题 1.神经网络中防止过拟合的方法 (1)降低模型复杂度 (2)正则化 ,正则化正是通过在损失函数上添加额外的参数稀疏性惩罚项(正则 ...

  7. 【笔试题目整理】京东2018秋招数据分析工程师笔试题

    最近在准备数据分析岗位的笔试,整理了牛客网上的一些试题与答案方便查看. ps:在牛客网搜索框搜索"数据分析",点击搜索分类版块"试卷"即可看到笔试套题. 套题信 ...

  8. 滴滴-2019+快手2020(A)-校园招聘算法工程师笔试题

    在什么情况需要对特征使用归一化处理? 要解决这个问题首先要看归一化的作用: 1.归一化可以加快梯度下降法求解最优解的速度. 当特征之间的数值变化范围相差太大时,会使得收敛路径呈Z字型,导致收敛太慢,或 ...

  9. BD视觉算法工程师笔试题

    选择题 1 答案:D 2 答案:A 此代码为PHP语言. 3 答案:A 4 答案:D 当一个优先级高的线程进入就绪状态时,它只是有较高的概率能够抢到CPU的执行权,不是一定就能抢到执行权. 当前线程调 ...

最新文章

  1. mysql设置远程访问
  2. Java界面命名_java中用setTitel和JFrame给窗体命名的区别
  3. java并发编程之美-阅读记录3
  4. 【Tools】Linux下C和C++程序中内存泄露检测
  5. 第十周项目1-程序填空与阅读(一)
  6. 我爱计算机视觉干货集锦分类汇总(2019年5月7日)
  7. 算法总结之 将单链表的每K个节点之间逆序
  8. 人一生之中遇到各种事件的概率
  9. windTerm—Xshell、SercureCRT等替代品
  10. latex 编译缺少STXingkai字体
  11. Linux终端解压压缩文件,如何从终端解压zip文件?
  12. Kali Linux 基于Easy File Sharing Web Server 6.9 编写漏洞渗透模块 (上)
  13. 服务器电脑的作用,什么是wins服务器及其作用 -电脑资料
  14. 台北故宫博物院收藏:气势开张,米芾行草书法真迹《真酥帖》赏析
  15. python-QQ群扫码登录(QQ群验证)
  16. http://www.jb51.net/softjc/33896.html(vs2010破解)
  17. 阿里云上海云栖大会上宣布多款核心云计算产品降价 最高降幅达50%
  18. android遥控器适配
  19. MACD抓妖神器 通达信指标公式 副图 源码 无加密 无未来
  20. java基础之异常_繁星漫天_新浪博客

热门文章

  1. ReadWriteLock1.8源码
  2. @Scope(prototype)
  3. 2019 牛客多校第9场 B Quadratic equation(二次剩余)
  4. CF11D A Simple Task(状压DP)
  5. 持续集成[代码流水线管理及Jenkins和gitlab集成]-自动化部署05
  6. Android 自定义ListView控件,滑动删除
  7. 动态规划思想-----求数组中出现最多数
  8. [转]UART 基础知识
  9. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池
  10. 【初学者必读】—PowerShell 基础详解及设置