牛客题
zj134_
以物喜
展开
-
跳台阶问题进阶
关于基础的跳台阶问题:剑指 Offer 10- II. 青蛙跳台阶问题_zj-CSDN博客不能连续两次走2步参考:[编程题]:走台阶改进版(2021字节跳动)_qq_27198345的博客-CSDN博客如果修改一下规则:每次还是可以走1步或者2步但是不能连续两次走2步(这一次走了2步,下一次就不能再走两步了)那么n阶的台阶,有多少种走法呢?先来思考,状态i(当前处于第i节楼梯)可能由什么状态转移而来?状态i-1,走一步就可以达到状态i,而走一步是没有任何限制的状态i-2,转移到状态i原创 2020-10-11 19:50:15 · 562 阅读 · 0 评论 -
字节题--手串
手串_字节跳动2018校招测试开发方向(第二批)_牛客网输入数据之后,对每种颜色所在的行数进行遍历,判断是否满足条件,尤其是注意首尾相连的判定:#include <iostream>#include <algorithm>#include <unordered_map>using namespace std;int main(){ int n, m, c; cin >> n >> m >> c; unordered原创 2020-10-01 22:57:12 · 213 阅读 · 0 评论 -
字节题--用户喜好
#include <bits/stdc++.h>using namespace std;int like[300005] = {0};int main(){ int n;cin >> n; for(int i = 1; i <= n; ++i) cin >> like[i]; int q;cin >> q; for(int i = 0; i < q; ++q){ int l, r, nu原创 2020-10-01 22:13:44 · 122 阅读 · 0 评论 -
字节题--多任务分配
编程题3_字节跳动2018校招大数据方向(第一批)_牛客网这题的处理逻辑并不难,但是处理起来需要考虑的东西很多,实现起来是不容易的,需要维护的数组较多#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;class idea {public: int idx; int pm_num, proposed_t原创 2020-10-01 18:27:48 · 484 阅读 · 0 评论 -
字节题--区间值
编程题2_字节跳动2018校招测试开发方向(第一批)_牛客网区间内的所有数字都在[0, 100]的范围内,但是个数却远超100,所以可以采用计数排序的思路。emmm。。。写完才发现自己理解错题目了,题目说的区间应该是输入序列的连续区间,所以就不是上面的计数排序思路了,应该是用类似滑动窗口的思路。但是这儿的滑动窗口是可以优化的,不用一次增加一个数这样,需要适当进行“剪枝”。比如窗口右边的数字大于等于窗口最小值的时候,把右边数字加入窗口肯定会使得目标和更大(也就是尽可能的延伸区间)。具体优化在注释里:原创 2020-09-30 21:10:02 · 516 阅读 · 0 评论 -
字节题-最大点
编程题1_字节跳动2018校招测试开发方向(第一批)_牛客网先写个暴力的,思路就是先排序,然后对于每个元素都将它与它后面的全部元素进行比较。可以过60%:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ int n; cin >> n; vector<pair<int, int&g原创 2020-09-29 21:13:27 · 166 阅读 · 0 评论 -
字节题--机器人跳跃问题
机器人跳跃问题_字节跳动2019春招研发部分编程题汇总_牛客网参考:AcWing 机器人跳跃问题 二分 - haust_fx - 博客园可以模拟第一个测试例子,初始能量值为4:建筑编号:0 1 2 3 4 5建筑高度:0 3 4 3 2 4能量值: 4 5 6 9 16 28所以能够保证全过程能力值不为负(最后的能量值不一定为0的噢)。初始能量值为3:建筑编号:0 1 2 3 4 5建筑高度:0 3 4 3 2 4能量值: 3原创 2020-09-29 01:02:28 · 342 阅读 · 0 评论 -
字节题--找零
找零_字节跳动2019春招研发部分编程题汇总_牛客网贪心算法,尽量找大的,大的找不开再用小的来凑。#include <iostream>using namespace std;int main(){ int n; cin >> n; int sum = 1024 - n; int res = 0; while(sum){ if(sum >= 64){ res += sum / 64;原创 2020-09-28 21:35:58 · 121 阅读 · 0 评论 -
字节题--毕业旅行问题
毕业旅行问题_字节跳动2019春招研发部分编程题汇总_牛客网例子这么看就很明确了:绿色的为路线。注意题目并没有说两个城市之间的往返车费是一样的(虽然给出的例子是一样的),先想到的是dfs遍历,代码如下,思路还是比较简单的,记得最后是要回到起点的,所以需要加上回起点的费用:#include <iostream>#include <vector>using namespace std;int res = 50000;//票价数组,访问数组,起点,历经城市数量,票价原创 2020-09-28 21:16:31 · 686 阅读 · 1 评论 -
字节题--特征提取
特征提取_字节跳动2019春招研发部分编程题汇总_牛客网这题理解起来倒是挺容易,不过输入处理有点烦。答题思路是先记录每个特征点所在的行编号,最好使用map进行记录,方便进行查询(使用数组的话后续的查询处理需要遍历,而且这儿我使用的是map而不是unordered_map,原因是我是用pair<int, int>存储点的,而unordered_map不支持以pair作为key)。然后判断每个点所在的行号是否存在连续的,取最大的就行了。#include <iostream>#原创 2020-09-28 19:44:19 · 208 阅读 · 0 评论 -
字节题--雀魂启动!
雀魂启动!_字节跳动2019春招研发部分编程题汇总_牛客网输入是13个数字,统计每个数字出现的次数,根据题意,次数最大为4,而出现的数字种类在4~9之间,和牌方式有两种,均需要一个雀头(2张一样的牌作雀头)。分析一下,如果出现数字种类只有4种,那和牌的唯一方式就是一个雀头(2)+ 4个顺子(12),因为一个雀头+4个刻子最少需要五种数字。而四种数字的分布可能是:11222233334444,雀头占用一种数字,那么四个顺子只能来自剩下三种数字,而这三种数字必须是连续的4个才可能;11222233原创 2020-09-28 17:30:30 · 558 阅读 · 0 评论 -
字节题--万万没想到之抓捕孔连顺
万万没想到之抓捕孔连顺_字节跳动2019春招研发部分编程题汇总_牛客网#include <vector>#include <iostream>using namespace std;long C(long n){ return (n-1) * n / 2;}int main(){ int n, d; cin >> n >> d; vector<int> pos(n, 0); long res = 0;原创 2020-09-28 02:19:03 · 148 阅读 · 0 评论 -
字节题--万万没想到之聪明的编辑
万万没想到之聪明的编辑_字节跳动2019春招研发部分编程题汇总_牛客网感觉测试样例很弱,随便谢谢就过了:#include <vector>#include <iostream>#include <string>using namespace std;void process(string &s){ for (int i = 0; i < s.size()-2; ++i){//规则1 while(i+2 < s.size() &a原创 2020-09-28 00:25:58 · 139 阅读 · 0 评论 -
无序数组中求最大值最小值
要求比较次数小于2n。最直接的做法,比较次数为2n:#include <bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; vector<int> a(n); for(int i = 0; i < n; ++i) cin >> a[i]; int min_val = a[0], max_val = a[0]; for(in原创 2020-09-12 14:33:13 · 1113 阅读 · 1 评论 -
进制转换
进制转换_华为研发工程师编程题_牛客网从右往左就行了#include <iostream>#include <string>using namespace std;int main(){ string s; while (cin >> s){ int res = 0, i = s.size()-1, val = 1; while (i > 1){ if (isdigit(s[i])) res += (s[i] - '0')*val;原创 2020-09-08 16:46:25 · 79 阅读 · 0 评论 -
D. Maximum Sum on Even Positions
某个tx面经上看到的题目,自己看了下觉得不会做,记录一下。题目解析来自:D. Maximum Sum on Even Positions(思维,最大连续和,类dp)_jziwjxjd的博客-CSDN博客以及:Codeforces 1373D - Maximum Sum on Even Positions (最大子段和)-布布扣-bubuko.com说实话我读了半天才弄明白题目是什么意思。。有一串序列,比如:0 1 2 3 4 5 6 7 8 9 这样,那么它的所有偶数(下标)位置的元素和就是:0原创 2020-09-07 11:13:49 · 355 阅读 · 0 评论 -
明明的随机数
明明的随机数_华为研发工程师编程题_牛客网两个功能,排序加去重实现方法那可太多了,可以直接调用sort() + unique():#include <iostream>#include <vector>#include <algorithm>using namespace std;void helper(vector<int> &a, int n){ sort(a.begin(), a.begin()+n);//排序 auto i原创 2020-09-08 16:30:30 · 151 阅读 · 0 评论 -
[编程题]汽水瓶
汽水瓶_华为研发工程师编程题_牛客网就是简单取余取模:#include <iostream>using namespace std;void helper(int val){ int res = 0; while (val >= 3){ res += val/3; val = val - 2 * (val/3); } if (val == 2) ++res; cout << res << endl;}int main(){ int原创 2020-09-08 16:10:16 · 213 阅读 · 0 评论 -
找出数组中每个数右边第一个比它大的元素
题目:给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值。如果不存在,对应值设为-1即可。如数组A=[1,5,3,6,4,8,9,10] 输出[5, 6, 6, 8, 8, 9, 10, -1]如数组A=[8, 2, 5, 4, 3, 9, 7, 2, 5] 输出[9, 5, 9, 9, 9, -1, -1, 5, -1]首先暴力法就不用说了,两层遍历就可以。不过这种题目是典型的单调栈的思路,可以一次遍历就得出所有结果。用栈来保存未找到右边第一个比它大的元素的索引(很原创 2020-10-21 21:22:35 · 990 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面__牛客网输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。如果不要求常熟空间复杂度的话,实用辅助数组很简单。要求空间复杂度的话,使用插入排序的思路,每当碰到偶数,就寻找这个偶数之后的第一个奇数,将区间内的元素全部右移一位,最后将奇数插入到原偶数的位置。class Solution {public: void reOrderArray(vect原创 2020-10-20 00:06:23 · 118 阅读 · 0 评论 -
飞机加油的问题
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几_微软笔试题_牛客网一道关于飞机加油的问题,已知:每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机)一箱油可供一架飞机绕地球飞半圈,问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)假设飞机速度一样,总油量为4:最优是一架飞机满油从1/4圈的位置飞到3/4圈。之后有飞机在3/4那里等着。3架飞机ABC从0飞到1/原创 2020-10-15 01:48:22 · 339 阅读 · 0 评论 -
acwing-双链表设计
827. 双链表 - AcWing题库说难也不难,但是细节比较多。下面的代码是超时的,因为数据量还是比较大的,超时的主要原因就是最右边插入的时候遍历是非常耗时的(可以维护一个尾节点来解决这个问题)。而且根据题意,其实都不用创建节点之类的操作,全程使用数组就可以了。#include <iostream>#include <string>using namespace std;struct Node{ Node() = default; Node(int原创 2020-10-05 20:08:18 · 484 阅读 · 0 评论 -
2-N之间的孪生素数的个数
额,判断一个数是否是素数: bool isPrime(int n){ for(int i = 3; i * i <= n; i += 2){//偶数不用考虑 if(n%i == 0) return false; } return true; }既然要相隔为2,那么枚举就可以了:#include <iostream>#include <vector>using namespa.原创 2020-10-05 16:15:52 · 367 阅读 · 0 评论 -
假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码...
编码_牛客网编码范围依次累加,所以需要计算的是累加过程中,该字符串之前有多少个字符串。如果觉得题目不好理解,可以先考虑长度为2,长度为3的情况,自己画一下应该就明白了。题目中可能的字符串长度有:1,2,3,4。所以可以按照长度对字符串进行分类,对于例子 “bbca”:我们现在需要计算该编码方法中,排在它前面的字符串有多少个,假设是 y 个,进一步假设这 y 个字符串中,分别有 y1, y2, y3, y4个长度分别为1,2,3,4的字符串。参考:TX2017秋招笔试题之编码 - 左岸繁华右岸殇原创 2020-09-11 22:26:11 · 1152 阅读 · 0 评论 -
坐标移动
坐标移动_牛客网#include <bits/stdc++.h>using namespace std;int main(){ string s; while(cin >> s){//多组输入输出 int x = 0, y = 0; int i = 0; while(i < s.size()){ if(isalpha(s[i])){ int j = i +原创 2020-09-09 00:57:56 · 157 阅读 · 0 评论 -
购物单
购物单_牛客网相当于是比较简单的 有依赖的背包问题,这儿附件最多只有两个,所以枚举起来也方便。不管是什么样的背包问题变体,一般都是转化为01背包问题进行处理的。先来思考依赖问题,附件不能够单独选,只能和主件搭配在一起,那么本题中对于一个主件,有四种搭配方式:只选主件,主件+附件1,主件+附件2,主件+附件1+附件2所以也就只是01背包问题多了几种选择而已。那么解题主要就是分两个步骤了:构建选择数组(也就是存储所有的选择)对选择数组进行01背包dp#include <bits/stdc原创 2020-09-09 00:21:56 · 225 阅读 · 0 评论 -
合并表记录
合并表记录_牛客网#include <iostream>#include <map>using namespace std;int main(){ int n; cin >> n; map<int, int> m; int key, value; for(int i = 0; i < n; ++i){ cin >> key >> value; if原创 2020-09-09 00:58:10 · 87 阅读 · 0 评论 -
质数因子
质数因子_牛客网这题有点麻烦,两步判断:是不是因子,是不是质因子判断是不是质数:LeetCode第 204 题:计数质数(C++)_zj-CSDN博客也可以看:判断一个数是不是质数(素数),3种方式介绍_阿飞的博客-CSDN博客一些偶数的情况可以直接略过#include <iostream>using namespace std;bool isprime(int n){//判断n是不是质数 if (n <= 3) return n > 1; if (n %原创 2020-09-09 00:58:03 · 3118 阅读 · 2 评论 -
字符串分隔
字符串分隔_牛客网#include <iostream>using namespace std;int main(){ string s, tmp; while(getline(cin, s)){ if(s.size() < 8){ s += string(8-s.size(), '0'); cout << s; } else if(s.size() ==原创 2020-09-08 19:47:11 · 170 阅读 · 1 评论 -
计算字符个数
计算字符个数_牛客网#include <iostream>#include <string>using namespace std;int main(){ string s; getline(cin, s); char ch; cin >> ch; ch = tolower(ch); int res = 0; for(const auto &c : s){ if(tolower(c原创 2020-09-08 19:44:56 · 89 阅读 · 0 评论 -
字符串最后一个单词的长度
字符串最后一个单词的长度_牛客网主要是处理标准输入输出,因为输入是一行,所以使用getline处理就可以了#include <iostream>using namespace std;int main(){ string s; getline(cin, s); int i = s.size()-1; while(i >= 0 && !isspace(s[i])) --i; if(i < 0) co原创 2020-09-08 19:29:01 · 94 阅读 · 0 评论