LeetCode算法题-Reach a Number(Java实现)

动态规划简单例子(数塔问题)java 问题描述:     从数塔的顶层出发,在每一个结点可以选择向左走或者向右走,一直走到最底层,要求找出一条路径,使得路径上的数值和最大。 解题思路:      先求解初始子问题:底层的每个数字可以看作1层数塔,则最大数值和就是其自身。      再求解下一个阶段的子问题:往上一层的决策是在底层决策的基础上进行求解,对每个数塔进行求解。       以此往上推。 数塔的存储结构为:‘   阅读详情

这是悦乐书的第310次更新,第331篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第179题(顺位题号是754)。你站在无限数字线的0号位置。在目的地有个target。在每次移动中,您可以向左或向右移动。在第n次移动(从1开始)期间,你可以走n步。返回到达目的地所需的最少步骤数。例如:

输入:target = 3

输出:2

说明:在第一步中,我们从0步进到1。在第二步,我们从1步骤到3。


输入:target = 2

输出:3

说明:在第一步中,我们从0步进到1。在第二步,我们从1步进到-1。在第三步,我们从-1步到2。


注意:target将是[-10 ^ 9,10 ^ 9]范围内的非零整数。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

此解法只是一种思路。因为每一步都有两种选择,往左或往右,一层一层展开,其结构类似树,因此可以构建一个二叉树,在构建二叉树的过程中,判断二叉树的节点值是否等于target。

03 第二种解法

在无从下手的情况下,我们来分析下几种情况:

第一,因为给的target可正可负,所以当target为负数时,其实与target为正数时是对称的,结果一样,所以在方法开始前,可以将其转为正数。

第二,如果一直是向左移动,移动的步数就变成了一个等差数列,总共移动的步数就是Nx(1+N)/2,如果其总步数等于目标值,这就是最优解,就可以直接返回移动的步数。

第三,既有左移,也有右移时,此时计算Nx(1+N)/2的值比target大,分为两种情况:

(1)Nx(1+N)/2 - target的差为偶数。例如总步数为1+2+3=6,target为4,两者相差为2,需要走三次,但是需要将第一步往左走,才能满足条件。只要是相差为偶数,就只需要差除以2的商的那一步往左走即可。

(2)Nx(1+N)/2 - target的差为奇数。此时上面的情况就不能满足了,就只能增加步数,那么是增加几步呢?此时我们需要去判断N了,如果N为偶数,需要再走一步,如果N为奇数,需要再走两步。例如target为5,已经走了三步,此时步数和为6,还需要再走两步,并且第5步需要往左走,也就是1+2+3+4-5=5。

public int reachNumber(int target) {
    target = Math.abs(target);
    int result = 0;
    long i = 0;
    while (i*(i+1) < 2*target) {
        i++;
    }
    if (i*(i+1)/2 == target) {
        result = (int)i;
    } else {
        if ((i*(i+1)/2 - target)%2 == 0) {
            result = (int)i;
        } else {
            if (i%2 == 0) {
                result = (int)i+1;
            } else {
                result = (int)i+2;
            }
        }
    }
    return result;              
}

04 第三种解法

对于上面第二种解法,我们还可以再简化下,将求和和判断放在了一个循环中处理,依旧是做减法判断差值的奇偶,因为不满足条件就一直做累加,只有差值为偶数时才会退出循环。

public int reachNumber(int target) {
    target = Math.abs(target);
    int result = 0, sum = 0;
    while (sum < target || (sum-target)%2 != 0) {
        result++;
        sum += result;
    }
    return result;              
}

05 小结

算法专题目前已日更超过五个月,算法题文章179+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

鼎捷T100—二次开发:客制化联络对象维护作业 aooi350 鼎捷T100二次开发,客制化 阅读详情

相关推荐

天融信防火墙NGFW4000(TG-4628)安装配置笔记

配置一台全新的天融信防火墙NGFW4000,配置完后,内网用户10.10.1.0/24和10.10.2.0/24可以通过防火墙上网,外网用户可以通过访问防火墙的外网接口地址来访问内网的WEB服务器10.10.1.200,并且内网用户也可以通过WEB服务器的外网地址进行访问。 网络说明: 防火墙外网接口地址:218.90.123.121/30 防火墙内网接口地址:19...

weixin_33671935的博客 4460

Leetcode算法Java全解答--77. 组合

Leetcode算法Java全解答–77. 组合 文章目录Leetcode算法Java全解答--77. 组合题目想法结果总结代码我的答案大佬们的答案测试用例其他 题目 给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], ...

cmqwan的博客 8818

思科模拟器实战:MQTT协议实现物联网设备通信全流程解析

本文详细解析了如何在思科模拟器中利用MQTT协议实现物联网设备通信的全流程。通过搭建网络拓扑、配置MQTT Broker与客户端,并编写发布/订阅逻辑,手把手指导读者完成一个“开关控制电灯”的经典物联网场景实验,帮助零成本掌握物联网通信核心。

weixin_29294975的博客 385

LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)

文章目录1. 题目2. 解题 1. 题目 存在一个长度为 n 的数组 arr ,其中 arr[i] = (2 * i) + 1 ( 0 <= i < n )。 一次操作中,你可以选出两个下标,记作 x 和 y ( 0 <= x, y < n )并使 arr[x] 减去 1 、arr[y] 加上 1 (即 arr[x] -=1 且 arr[y] += 1 )。 最终的目标是使数组中的所有元素都 相等 。题目测试用例将会 保证 :在执行若干步操作后,数组中的所有元素最终可以全部相等。 给

Michael是个半路程序员 2866

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1179

手把手教你用CODESYS将旧笔记本改造成软PLC(含证书配置避坑指南)

本文提供了一份详尽的指南,教你如何利用CODESYS平台将闲置旧笔记本改造为一台功能完整的软PLC。内容涵盖从硬件评估、系统实时性优化、软件安装与驱动配置,到关键的证书授权管理避坑指南,旨在帮助自动化工程师和爱好者低成本搭建稳定可靠的学习与开发平台。

weixin_29190573的博客 281

LeetCode每日一题--514. 自由之路(动态规划)

题目:跳转至 514. 自由之路 电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。 最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。

qq_39295095的博客 346

containerd镜像加速配置全解析:从host.toml到config.toml的演进与实践

本文全面解析了containerd镜像加速的配置方法,重点对比了传统的config.toml集中式配置与现代的host.toml模块化配置的演进与优劣。文章通过实战演示,详细指导如何为docker.io、registry.k8s.io等常见仓库配置host.toml加速,并提供了生产环境下的最佳实践、故障排查与性能优化建议,帮助用户显著提升镜像拉取效率与系统稳定性。

jenkins8butler的博客 699

java鱼雷reach_LeetCode算法题-Reach a Number(Java实现)

这是悦乐书的第310次更新,第331篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第179题(顺位题号是754)。你站在无限数字线的0号位置。在目的地有个target。在每次移动中,您可以向左或向右移动。在第n次移动(从1开始)期间,你可以走n步。返回到达目的地所需的最少步骤数。例如:输入:target = 3输出:2说明:在第一步中,我们从0步进到1。在第二步,我们从1...

weixin_30762363的博客 471

UR5双臂Gazebo仿真(Python)

近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle

qq_42823342的博客 2233

硬件电路RS485通信EMC 设计

RS485通讯硬件设计与STM32实现要点 本文详细介绍了RS485通讯系统的硬件设计和STM32实现方案。硬件设计重点包括:采用总线型拓扑结构、120Ω终端电阻匹配、屏蔽双绞线布线、TVS管和自恢复保险丝保护等核心要素。EMC设计强调共模电感抑制干扰、屏蔽层单端接地、光电隔离等技术。软件实现方面,提供了基于STM32F103的完整程序框架,包括UART初始化、收发控制逻辑和中断处理机制,特别强调了收发切换时机、波特率精度等关键注意事项。文中还给出了工业传感器节点的实际应用案例,展示了一个完整的EMC防护电

qq_37999850的博客 1384

LeetCode 754. Reach a Number (Java版; Medium)

welcome to my blog LeetCode 754. Reach a Number (Java版; Medium) 题目描述 You are standing at position 0 on an infinite number line. There is a goal at position target. On each move, you can either go lef...

littlehaes的博客 222

在 SAP GUI 里开发与调用 Adobe PDF 表单:SFP 建模 + Driver Program 调用的全流程实战

本文介绍了在SAP系统中使用Adobe PDF表单的完整流程。重点阐述了SAP Interactive Forms相比传统表单工具的优势,特别是在处理复杂排版、条码和交互式字段时的适用性。文章详细说明了开发流程:从安装设计工具Adobe LiveCycle Designer开始,到在SFP事务码中创建Interface和Form的数据模型,再到编写驱动程序的ABAP代码实现PDF输出。特别强调了Interface作为数据契约的重要性,以及如何通过分层设计实现前后端分离开发。最后提供了标准调用链的示例代码,展

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 281

[Leetcode学习-c++&java]Reach a Number

问题: 难度:medium 说明: 假设你有一个无限坐标轴,然后你 第 N 步 可以一次移动 N 个位置(从 1 开始),给出一个坐标 T,求最少多少步可以移动到坐标 T。 题目连接:https://leetcode.com/problems/reach-a-number/ 输入范围: targetwill be a non-zero integer in the range[-10^9, 10^9]. 输入案例: Example 1: Input: target = 3 Output:..

qq_28033719的博客 151

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

754. Reach a Number leetcode

在一根无限长的数轴上,你站在0的位置。终点在target的位置。 每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。 返回到达终点需要的最小移动次数。 示例 1: 输入: target = 3 输出: 2 解释: 第一次移动,从 0 到 1 。 第二次移动,从 1 到 3 。 示例 2: 输入: target = 2 输出: 3 解释: 第一次移动,从 0 到 1 。 ...

席同学的博客 284

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Leetcode】1557. Minimum Number of Vertices to Reach All Nodes

题目地址: https://leetcode.com/problems/minimum-number-of-vertices-to-reach-all-nodes/ 给定一个有向无环图,其有nnn个顶点,编号为0∼n−10\sim n-10∼n−1。求一个最少的点集,使得每个点都能由这个点集中的某个点走到。题目保证答案唯一。 直接求没有入边的点即可(有入边的点只需要向前找,总能找到某个没有入边的点)。代码如下: import java.util.ArrayList; import java.util.Lis

数学、算法爱好者的博客 427

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

754. Reach a Number

You are standing at position0on an infinite number line. There is a goal at positiontarget. On each move, you can either go left or right. During then-th move (starting from 1), you takenstep...

weixin_30872733的博客 82

LeetCode754(Reach a number) Java 代码.

leetcode

zlzl8885的博客 913

leetcode 754. Reach a Number 到达终点数字-耗时100%

通过观察下面的式子,可以发现可以向左移动多次,而且每次向左移动,相当于向右少移动偶数次, 1 - 2 + 3 = 1+2+3 - 2*2,-1+2+3 = 1+2+3 - 1 * 2 ,1 + 2 + 3 + 4 - 5 = 1 + 2 + 3 + 4 + 5 - 2 * 5所以向左移动相当于减去一个偶数,所以最后的结果是 1+2+3+。。。+k - 偶数= (1+k)*k/2 - 偶数答案首先找到满足条件的不需要减去的数字,然后找到累加和>target的n,奇数-偶数=奇数,偶数-偶数=偶数,所以 被减数

邹九的个人博客 369

领扣-754 到达终点数字 Reach a Number MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 领扣-754 到达终点数字 Reach a Number MD 目录 目录到达终点数字 Reach a Number MD...

weixin_34268753的博客 268

LeetCode——1850. 邻位交换的最小次数(Minimum Adjacent Swaps to Reach the Kth Smallest Number)[中等]——分析及代码(Java)

LeetCode——1850. 邻位交换的最小次数[Minimum Adjacent Swaps to Reach the Kth Smallest Number][中等]——分析及代码[Java]一、题目二、分析及代码1. 模拟 + 贪心(1)思路(2)代码(3)结果三、其他 一、题目 给你一个表示大整数的字符串 num ,和一个整数 k 。 如果某个整数是 num 中各位数字的一个 排列 且它的 值大于 num ,则称这个整数为 妙数 。可能存在很多妙数,但是只需要关注 值最小 的那些。 例如,num

江南土豆的博客 479

LeetCode——1928. 规定时间内到达终点的最小花费(Minimum Cost to Reach Destination in Time)[困难]——分析及代码(Java)

LeetCode——1928. 规定时间内到达终点的最小花费[Minimum Cost to Reach Destination in Time][困难]——分析及代码[Java]一、题目二、分析及代码1. 动态规划(1)思路(2)代码(3)结果三、其他 一、题目 一个国家有 n 个城市,城市编号为 0 到 n - 1 ,题目保证 所有城市 都由双向道路 连接在一起 。道路由二维整数数组 edges 表示,其中&nbs

江南土豆的博客 1230

LeetCode(871):最低加油次数 Minimum Number of Refueling Stops(Java)

2019.7.25 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 这道智力题让我想起了LeetCode 871:加油站。 可以很容易能够想到用回溯法来做,每次经过加油站选择加油或者不加,就是一棵简单的二叉决策树,但是会报超时。 这道题可以用贪心策略做。用一个最大堆模拟后备箱,之后尽可能地将汽油放至后备箱,每次从最多的一桶油开始使用(没有用过的油相当于没有在加油站添加) ...

NJU_ChopinXBP的博客 723

LeetCode每日一题(Minimum Number of Vertices to Reach All Nodes)

Given a directed acyclic graph, with n vertices numbered from 0 to n-1, and an array edges where edges[i] = [fromi, toi] represents a directed edge from node fromi to node toi. Find the smallest set of vertices from which all nodes in the graph are reachab

wangjun861205的博客 188

[leetcode] 1642. Furthest Building You Can Reach

Description You are given an integer array heights representing the heights of buildings, some bricks, and some ladders. You start your journey from building 0 and move to the next building by possibly using bricks or ladders. While moving from building i

Learning from the mistakes 482

每周LeetCode算法题(五):416. Partition Equal Subset Sum

每周LeetCode算法题(五)题目: 416. Partition Equal Subset Sum Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in b

JacKnights的博客 430
上一篇: LeetCode算法题-Shortest Completing Word(Java实现)
下一篇: LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值