zoukankan      html  css  js  c++  java
  • leetcode754

    //很典型的数学推导 + 简单编程问题
    //这个问题转换成1 , 2 ,3 ,...,n添加正负号求和等于t的问题 (这一步在做题的时候想到了),已知t 求解n的这样一个过程
    //于是设正数部分是p 负数部分的和是q
    //有 p + q = s(前n求和)
    //有 p - q = t
    //想见得到 s - t = 2q 注意这里2q直接看成偶数即可 等式右边直接看成一个约束条件 因为对于1~n满足这个等式de 
    //q必然小于n 而可以取的又是连续整数 极其和 所以只需要枚举s-t是偶数并且大于等于0成立的最小n即可
    //很典型的思路
    
    class Solution {
    public:
        int reachNumber(int target) {
            if(target < 0) target -= 2*target;
            int index = 1;
            while(1){
                int s = (index + 1) * index / 2;
                int temp = s - target;
                if(temp >= 0 && temp % 2 == 0)
                     break;
                index++;
            }
            return index;
        }
    };
  • 相关阅读:
    邪恶的强制数据转换
    知识普及
    判断是否为一个数字
    parseInt
    webpack学习记录
    数组隐藏属性
    elasticSearch基本使用
    elasticsearch安装和部署
    neo4j索引
    spark yarn 提交作业
  • 原文地址:https://www.cnblogs.com/rhythmic/p/11567664.html
Copyright © 2011-2022 走看看