微软笔试题 回忆(回文方面)
这道题当年我没有做出来,今天微软笔试又碰到了类似的题目
狠心要将这一块吃透
主要还是对动态规划掌握的不够熟练。
去年的题目: 最少射击几次
N个瓶子都有编号,每次能射击1个或多个瓶子,如果是回文的就能一次性击倒。最少几次能全击倒?
测试
输入:[1, 2]
输出:2
输入:[1,3,4,1,5]
输出:3
说明:第一次先射3,变成[1,3,1,5],因为有[1,3,1]回文可以一次击倒,剩下[5]再一次
解题思路:
使用动态规划,我们可以将射击分为一系列子任务,用动态规划熟悉的表格表示,score[ i ] [ j ]表示要击倒 i 到 j 瓶子至少需要几次
那么首先就可以知道score[0 ][0] 、score[1][1]、score[2][2] 、、、都为1(原因很显然,只有一个杯子,当然需要一次)
接下来,就继续扩大范围,看两个两个杯子
接下来是三个 三个
一次递增
我们可以看到 如果 第 j 个杯子 与 第 j + i个杯子相等
那么 score[j][j+i] 就可以等于 scores[j + 1][j + i - 1] ,也就是夹在他们中间的一段(因为动态规划,规模小的已经最优)
但是这里我们还需要考虑scores[j][j + k] + scores[j + k + 1][j + i] 这样的情况(也就是把整段切分为前后两段)
综合以上思路,某位大佬的代码如下:
参考代码:
//
// main.cpp
// leetcodeTest
//
// Created by Qiucheng LIN on 2020/3/25.
// Copyright © 2020 Qiucheng LIN. All rights reserved.
//#include <vector>
#include <climits>
#include <iostream>
using namespace std;int main() {int N = 8;vector<int> bottles = { 1,2,3,2,9,8,9,1 };vector<vector<int>> scores(N, vector<int>(N));for (int i = 0; i < N; i++){scores[i][i] = 1;}for (int i = 1; i < N; i++) {for (int j = 0; j < N - i; j++) {int min_score = INT_MAX;if (bottles[j] == bottles[j + i]) {min_score = i > 1 ? scores[j + 1][j + i - 1] : 1;}for (int k = 0; k < i; k++) {int temp = scores[j][j + k] + scores[j + k + 1][j + i];if (temp < min_score) {min_score = temp;}}scores[j][j + i] = min_score;}}cout << scores[0][N - 1];return 0;
}
今年的题目:
第二题也是关于回文的
第二题:
给一个字符串,每次可以移除其中一个字符,或者移除一个回文子串,求 全部移除所需最少次数
例如:14315.先移除3,再移除141,再移除5,得到最少次数3.
其实理解一下题意就会发现一模一样。
微软笔试题 回忆(回文方面)相关推荐
- 数位DP--由一道微软笔试题引起
前天晚上,一位研三的学长突然跑到我们宿舍,问我们一道微软笔试题.给你一个整数n,求出1到n这个区间范围内包含数字0的个数,例如当n=10的时候就只有10包含0,输出1,n=90就输出9.唯一的要求是此 ...
- 美团2023年春招在线前端笔试题回忆版
提示:题目不一定完全正确,只能说给大家参考会考察哪些知识点. 文章目录 前言 一.单选(计算机基础知识) 二.专项选择 三.编程题 1. 某地有一个火车站如下图所示,小红很好奇火车是怎么驶进驶出的,然 ...
- 试题16 回文数字(5位或6位)
题目: 观察数字:12321,123321都有一个共同特征,就是无论从左到右读还是从右向左读,都是相同的,叫回文数 现在要从5位或6位的十进制数字中找出各个数位之和等于n的回文数. 输入格式 输入一个 ...
- 试题14 回文数(详解)
题目: 一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数.比如121,2332都是回文数,13,4567度不是回文数. 任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得 ...
- ios笔试题算法_微软笔试题-Dijkstra算法
Dijkstra算法是典型的算法.Dijkstra算法是很有代表性的算法.Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临 ...
- CVTE 2017 秋季校招笔试题回忆(C++后台)
1.概述 2016.09.06 晚参加了 CVTE C++ 岗的在线笔试.笔试题型分为不定向选择题和编程题,总共 27 题.其中不定项选择题为 25 道,编程题 2 道.其特点是不定项选择题不告诉你是 ...
- X康java开发工程师笔试题回忆版
一. 1. String a = "abc"; String b = "abc"; System.out.println(a==b); System.out.p ...
- 微软笔试题,机器人消砖块
我比较傻叉,居然忘了用动态规划做,用了递归,各种边界判断,而且数组稍大一点就栈溢出.递归可以剪支,稍微减少一些递归次数.不管怎么样还是贴上自己的傻叉代码吧 #include<iostream&g ...
- 微软笔试题 2013暑期实习笔试题目
2019独角兽企业重金招聘Python工程师标准>>> 1: 有1000瓶水,其中1瓶是有毒的,小老鼠如果喝了有毒的水会在一个星期后死掉,问至少需要多少只小老鼠来做实验,才能够在一星 ...
- 微软笔试题(看到的写答案啊)
int func(int n, int* r) { printf("n=%d *r=%d\n",n,*r);//加了个打印的东西 return n && (*r + ...
最新文章
- python数据结构与算法(11)
- 我今天的收获,必备stadio 插件
- itextpdf中文不显示_LaTeX实时预览中文
- ThinkPHP入门--后盾视频
- 注意2018年数据中心的这5大发展趋势
- Java 理论与实践: 流行的原子
- 大话业务流程图(二)—如何绘制业务流程图?
- 编写python代码估算sin(x)的值
- k8s Deployment
- matlab求解数学题,实验二Matlab求解数学问题
- 蜀道难于上青天 四川盆地DEM数据下载
- 利用 pdf.js 实现在前端预览 .pdf 文件
- 快速给图片加水印的方法
- PIC16F15323单片机 (中断与定时器Timer0)
- 代码中出现的奇怪问题原因
- DDD - 概述 - (一)
- Java 输入一个正整数的字符串,输出与它最接近的对称数字(不包括它自己)的字符串
- windows 7下工行U盾证书密码框弹不出来--解决方案
- 亲完如何进行下一步_相亲完了下一步怎么办 相亲过后怎么发展
- C#ObjectArx Cad创建点线块