码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【754. 到达终点数字】


    来源:力扣(LeetCode)

    描述:

    在一根无限长的数轴上,你站在0的位置。终点在target的位置。

    你可以做一些数量的移动 numMoves :

    • 每次你可以选择向左或向右移动。

    • 第 i 次移动(从 i == 1 开始,到 i == numMoves ),在选择的方向上走 i 步。

    给定整数 target ,返回 到达目标所需的 最小 移动次数(即最小 numMoves ) 。

    示例 1:

    输入: target = 2
    输出: 3
    解释:
    第一次移动,从 0 到 1 。
    第二次移动,从 1 到 -1 。
    第三次移动,从 -1 到 2 。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例 2:

    输入: target = 3
    输出: 2
    解释:
    第一次移动,从 0 到 1 。
    第二次移动,从 1 到 3 。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    提示:

    • -109 <= target <= 109
    • target != 0

    方法:分析 + 数学

    思路

      假设移动了 k 次,每次任意地向左或向右移动,那么最终达到的位置实际上就是将 1, 2, 3, …, k 这 k 个整数添加正号或负号后求和的值。如果 target < 0,可以将这 k 个数的符号全部取反,这样求和的值为 −target > 0。因此我们可以只考虑 targe t> 0 的情况。

      设 k 为最小的满足
    1

    的正整数。如果 s = targets,那么答案即为 k。如果 s > targets,需要在部分整数前添加负号来将和凑到 target。

    如果 delta = s − target 为偶数,则目标为从 1 到 k 中找出若干个整数使得他们的和为 delta / 2,下面证明一定能到找这样的若干个整数。

    • 如果 k ≥ delta / 2,那么只需要选出一个 delta / 2。

    • 否则,可以先选出 k,再从剩余的 11 到 k−1 中选出和为 delta / 2 − k 的若干个数即可,这样就把原问题变成了一个规模更小的问题。因为 delta / 2 < s,因此一定可以找出若干个数使得和为 delta / 2。

    如果 delta 为奇数,那么就无法凑出这样的若干个数字。考虑 k+1 和 k+2,
    2

    中必有一个和 s 的奇偶性相同,使得此时的 delta 为偶数。此时也满足 ⌊ delta / 2⌋ < ∑,因此也可以找到若干个数的和为 ⌊delta / 2⌋。

    代码:

    class Solution {
    public:
        int reachNumber(int target) {
            target = abs(target);
            int k = 0;
            while (target > 0) {
                k++;
                target -= k;
            }
            return target % 2 == 0 ? k : k + 1 + k % 2;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3

    复杂度分析
    时间复杂度:O(target)。循环内最多执行 O(target)次。
    空间复杂度:O(1)。只使用常数空间。
    author:力扣官方题解

  • 相关阅读:
    Spring boot集成nacos图文教程
    JDBC 版本和历史
    java后端开发面试准备(1)-Redis缓存
    推荐模型复现(四):多任务模型ESMM、MMOE
    Go学习-基本语法(一)
    11+单基因泛癌,转录组+单细胞+机器学习+预后模型
    代码随想录算法训练营第三天| 203.移除链表元素、707.设计链表 、206.反转链表(JS写法)
    深圳市第十二届职工技术创新运动会暨2022年深圳技能大赛—集成电路应用开发职业技能竞赛
    自主通用多物理场仿真PaaS平台伏图(Simdroid)及伏图电子散热模块上架华为云商店
    RMAN-06023
  • 原文地址:https://blog.csdn.net/Sugar_wolf/article/details/127685677
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号