牛客题解 | 小招喵跑步
1.牛客题解 | 寻宝2.牛客题解 | 寻找Coder3.牛客题解 | 寻找丑数4.牛客题解 | 寻找合法字符串5.牛客题解 | 寻找奇数6.牛客题解 | 寻找子串7.牛客题解 | 将满二叉树转换为求和树8.牛客题解 | 小A最多会新认识的多少人9.牛客题解 | 小Q的排序10.牛客题解 | 小东分苹果
11.牛客题解 | 小招喵跑步
12.牛客题解 | 小明卖食物13.牛客题解 | 小明的字符串14.牛客题解 | 小易喜欢的单词15.牛客题解 | 小易喜欢的数列16.牛客题解 | 小易的字典17.牛客题解 | 小游戏18.牛客题解 | 小熊吃糖19.牛客题解 | 小球的距离20.牛客题解 | 小米Git21.牛客题解 | 小米大礼包22.牛客题解 | 山寨金闪闪23.牛客题解 | 工作方案24.牛客题解 | 左右最值最大差25.牛客题解 | 带权的DAG节点排序26.牛客题解 | 平均年龄27.牛客题解 | 平方串28.牛客题解 | 年会抢玩偶游戏29.牛客题解 | 年终奖30.牛客题解 | 幸运子序列31.牛客题解 | 幸运数32.牛客题解 | 幸运数字33.牛客题解 | 幸运的袋子34.牛客题解 | 幼儿园分班35.牛客题解 | 序列合并36.牛客题解 | 序列找数37.牛客题解 | 序列操作38.牛客题解 | 序列模式匹配39.牛客题解 | 建物流中转站40.牛客题解 | 异或41.牛客题解 | 彩色宝石项链42.牛客题解 | 彩色的砖块43.牛客题解 | 彩色的砖块_144.牛客题解 | 循环数比较45.牛客题解 | 循环数比较_146.牛客题解 | 微信红包47.牛客题解 | 怪数48.牛客题解 | 懂二进制49.牛客题解 | 手串50.牛客题解 | 手套51.牛客题解 | 手机号52.牛客题解 | 扎金花53.牛客题解 | 扑克牌四则运算54.牛客题解 | 打印二维数组55.牛客题解 | 打印回形数56.牛客题解 | 扭蛋机57.牛客题解 | 找“异数”58.牛客题解 | 找出单向链表中的一个节点,该节点到尾指针的距离为K59.牛客题解 | 找出重复的数字60.牛客题解 | 找到最近的NPC61.牛客题解 | 找缺失数字62.牛客题解 | 找零63.牛客题解 | 折纸问题64.牛客题解 | 抛小球65.牛客题解 | 抽牌66.牛客题解 | 拍照队形67.牛客题解 | 拓扑结构相同子树68.牛客题解 | 招聘会小礼品69.牛客题解 | 拜访70.牛客题解 | 括号匹配方案71.牛客题解 | 括号匹配深度72.牛客题解 | 括号配对问题73.牛客题解 | 拼凑三角形74.牛客题解 | 拼凑正方形75.牛客题解 | 拼凑硬币76.牛客题解 | 拼凑面额77.牛客题解 | 挑选镇长78.牛客题解 | 换乘79.牛客题解 | 换零钱80.牛客题解 | 排序81.牛客题解 | 排序次数82.牛客题解 | 提取优惠券码83.牛客题解 | 搬圆桌84.牛客题解 | 搭积木85.牛客题解 | 操作序列86.牛客题解 | 操作序列_187.牛客题解 | 改考卷88.牛客题解 | 数三角形89.牛客题解 | 数位重排90.牛客题解 | 数列91.牛客题解 | 数列的和92.牛客题解 | 数列计算93.牛客题解 | 数列还原94.牛客题解 | 数字和为sum的方法数95.牛客题解 | 数字字符96.牛客题解 | 数字序列97.牛客题解 | 数字构造98.牛客题解 | 数字游戏99.牛客题解 | 数字游戏_1100.牛客题解 | 数字的情绪题目
解题思路
- 这是一个动态规划问题,需要找到到达目标位置的最少步数
- 状态转移方程:
- 当位置 能被2整除时: (通过乘2操作到达)
- 当位置 不能被2整除时: (要么+1,要么先+1再乘2)
- 基础情况:
代码
#include <iostream>
#include <vector>
using namespace std;
int move(int x) {
// 处理负数
if(x < 0) x = -x;
// 处理小于等于3的情况
if(x <= 3) return x;
vector<int> dp(x + 1);
// 初始化基础情况
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
// 动态规划填表
for(int i = 4; i <= x; i++) {
if(i % 2 == 0) {
dp[i] = dp[i/2] + 1;
} else {
dp[i] = min(dp[(i+1)/2] + 2, dp[i-1] + 1);
}
}
return dp[x];
}
int main() {
int x;
cin >> x;
cout << move(x);
return 0;
}
import java.util.Scanner;
public class Main {
public static int move(int x) {
// 处理负数
if(x < 0) x = -x;
// 处理小于等于3的情况
if(x <= 3) return x;
int[] dp = new int[x + 1];
// 初始化基础情况
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
// 动态规划填表
for(int i = 4; i <= x; i++) {
if(i % 2 == 0) {
dp[i] = dp[i/2] + 1;
} else {
dp[i] = Math.min(dp[(i+1)/2] + 2, dp[i-1] + 1);
}
}
return dp[x];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println(move(x));
}
}
def move(x):
# 处理负数
if x < 0:
x = -x
# 处理小于等于3的情况
if x <= 3:
return x
dp = [0] * (x + 1)
# 初始化基础情况
dp[1] = 1
dp[2] = 2
dp[3] = 3
# 动态规划填表
for i in range(4, x + 1):
if i % 2 == 0:
dp[i] = dp[i//2] + 1
else:
dp[i] = min(dp[(i+1)//2] + 2, dp[i-1] + 1)
return dp[x]
x = int(input())
print(move(x))
算法及复杂度
- 算法:动态规划
- 时间复杂度: - 需要填充dp数组直到目标位置
- 空间复杂度: - 需要一个长度为 的dp数组
合集:
牛客笔试大厂真题题解3
分类:
牛客笔试大厂真题题解3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话