zoukankan      html  css  js  c++  java
  • LeetCode 754. Reach a Number

    754. Reach a Number(到达终点数字)

    链接:https://leetcode-cn.com/problems/reach-a-number/

    题目:

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

      每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。

      返回到达终点需要的最小移动次数。

      示例 1:

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

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

      target是在[-10^9, 10^9]范围中的非零整数。

    思路:

      emmmmmm这是一道数学题,需要找规律(一看这个数就知道不能暴力破解)。

      设定目标坐标为target,已经走了n步,坐标为F(n)=(n+1)*n/2,F(n-1)<sum<=F(n)找规律:

        1.如果每一步都往同方向走,最后的坐标是1+2+3+...+n=(n+1)*n/2。这样成立的话,所需步数就是n步,target=sum;

        2.目标值与sum存在差,(sum-target)为偶数 t 。那么,我们只需要在步长为 t/2 的那步反向走就行了,所需要的步数是 n;

        3.如果二者差距为奇数,(sum-target)为奇数k,这时候就有两种可能:

          (1)n为奇数,将n拆为(n-1)和1,(n-1)为偶数,按照第一类进行,1就多走两步,一正一反就得到差值1,所需步数为n+2

          (2)n为偶数,这时候多走一步n+1,差距就为n+1+sum-target(偶数),也按照第一类进行,只需要n+1步。

    代码:

     1 public static int reachNumber(int target) 
     2 {
     3     target = Math.abs(target);   
     4         int count = 0;  
     5         int sum = 0;  
     6         while (sum < target) 
     7         {  
     8             count++;  
     9             sum = sum + count;  
    10         }  
    11         if((sum - target)%2 != 0) 
    12         {  
    13             if (count % 2 == 0) 
    14                 count = count + 1;  
    15             else  
    16                 count = count + 2;   
    17         }  
    18         return count;  
    19     }
  • 相关阅读:
    Linux 重启命令
    Linux TCP连接数修改
    Linux 命令--查看物理CPU个数、核数、逻辑CPU个数
    keepalived配置文件
    keepalived 安装配置
    linux下keepalived 安装配置
    redis主从切换的集群管理
    CentOS_5.6下使用cmake编译MySQL_5.5.11
    cas错误:org.jasig.cas.client.validation.TicketValidationException: No principal was found in the response from the CAS server.
    完美实现在同一个页面中使用不同样式的artDialog样式
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11180514.html
Copyright © 2011-2022 走看看