首页 > 其他分享 >Reach a Number

Reach a Number

时间:2022-11-07 07:44:18浏览次数:78  
标签:target int sum Reach Number 累加 偶数 https

https://leetcode.cn/problems/reach-a-number/

假设target=4,

一直累加步数,直到其正好大于等于target

0 + 1 + 2 + 3 = 6

此时累加和已经大于target,且差值为偶数6-4=2;那么实际上只要将加上距离为1的时候,不加1,而是加 -1,那么此时累加和就损失了2,那么正好能到目标值4。0-1+2+3 = 4.

也就是,当 累加和 - target = 偶数d时,只需将第 d // 2 步的距离取反,就能得到目标值

如果 累加和 - target = 奇数d时,且当前为第n步,那么看下一步n+1的奇偶,

如果 n+1 为奇数,则加上 n+1 再做差,得到的差值就为偶数了,问题解决,

如果 n+1 为偶数,则还得加上 n+2 这个奇数,才能让差值为偶数,这样就多加了两步。

def reachNumber1(self, target: int) -> int:
        target = abs(target)
        k = 0
        sum = 0
        while sum < target or (sum - target) & 1 == 1:
            k += 1
            sum += k
        
        return k

    
    def reachNumber(self, target: int) -> int:
        target = abs(target)
        k = 0
        sum = 0
        while (sum < target):
            k += 1
            sum += k 
        
        d = sum - target
        if d & 1 == 0: return k 
        return (k+1) + (k&1)

https://youtu.be/Bdw2Y9FrqcU
https://www.cnblogs.com/grandyang/p/8456022.html

标签:target,int,sum,Reach,Number,累加,偶数,https
From: https://www.cnblogs.com/zijidan/p/16864803.html

相关文章

  • Find the Duplicate Number
    https://leetcode.cn/problems/find-the-duplicate-number/submissions/方法1:pos记录无重复区间的下一个位置(TLE)deffindDuplicate(self,nums:List[int])->int:......
  • stack 的foreach迭代
    stack底层为数组,foreach和iterator迭代时遍历数组输出,publicclassVector<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,java.i......
  • JAVA8-Lambda-forEach遍历List/Map
    一、遍历List代码示例publicstaticvoidmain(String[]args){List<String>list=Arrays.asList("北","上","广","深");list.forEach(System.out::prin......
  • [??记录]arc137C Distinct Numbers
    这段时间第一道没能自己想出来的题。题意:给定\(n\)个数,二人玩游戏,每次把全局最大数减小并改成一个当前未出现的数,不能操作者败。求胜者。首先我们来研究一次操作时的情......
  • B - K-th Number HDU - 6231 (二分 尺取)
    WindowsSource2017中国大学生程序设计竞赛-哈尔滨站题意给一个数组,在所有长度大于等于k的区间内,找出第\(k\)大的数,放到另一个数组中,然后在新数组中找到第M大的数。思......
  • CodeForces - 914C Travelling Salesman and Special Numbers
    题意:给出一个二进制数a,每次操作将当前数变成其二进制下1的个数,若干次操作后可以将其变为1.给定k,求不大于a的数中,经过k次操作能变成1的数的数量。解:观察一下这个操作,可以求......
  • mysql旧版本实现row_number
    mysql8.0已经有row_number了,但是很多同学用的还是老版本,当需要用到row_number的功能时,老版本也是有解决方案的。比如我们有一张表sync_task_log,有三个字段ds_id,state,sy......
  • 2022-11-04 js foreach 三重循环
    letarr=[];req.data.forEach((e,k1)=>{letobj={};obj.value=e.content;obj.children=[];obj.expand=false;if(e.children){e.child......
  • cmake-foreach循环
    cmake_minimum_required(VERSION3.22)message("循环获取变量值的方式")set(a1)foreach(currentElement${a}bc) #获取变量值的方式 #循环遍历列表 message("for......
  • 452.minimum-number-of-arrows-to-burst-balloons 用最少数量的箭引爆气球
    问题描述452.用最少数量的箭引爆气球解题思路首先,按照\(x_start\)从小到大的顺序排序,然后开始分析需要的弓箭数。if(points[i][0]>points[i-1]),说明两个气球不存......