当前位置: 首页 > news >正文

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

Problem: 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,奇数-偶数=奇数,偶数-偶数=偶数,所以 被减数 和 差 的奇偶性相同,不满足的话n++

而且被减去的偶数,一定可以通过1,2,。。。,k这些数字凑出来,具体的可以翻看官方题解的

就像12: 1 + 2 - 3 + 4 - 5 + 6 + 7,偶数可以通过-3 -5凑出来

// 1-2+3 2 // 1+2 3 // -1+2+3 4 // 1 + 2 + 3 + 4 - 5 5 // 1 + 2 + 3 6 // 1 + 2 + 3 - 4 + 5 7 // 1 + 2 - 3 + 4 - 5 + 6 + 7 12

Code

class Solution { public: int reachNumber(int target) { // 1-2+3 2 // 1+2 3 // -1+2+3 4 // 1 + 2 + 3 + 4 - 5 5 // 1 + 2 + 3 6 // 1 + 2 + 3 - 4 + 5 7 // 1 + 2 - 3 + 4 - 5 + 6 + 7 12 target = abs(target); int n = sqrt( (double)( target * 2 ) ); double f1 = n * (n+1) / 2.0f; double f2 = (n+1) * (n+2) / 2.0f; if(f1==(double)target) { return n; } if(f2==(double)target) { return n+1; } while(f1 < target) { n++; f1 = n * (n+1) / 2.0f; } while( true ) { int l = 2, r = n * 2, mid, sum; sum = n * (n + 1) / 2; // while(l <= r) { // mid = (l + r) / 2; // if(sum - mid==target && (mid%2==0)) return n; // if(l==r) break; // if(sum - mid < target) { // r = mid-1; // } else { // l = mid+1; // } // } if(sum%2==1 && target%2==0) { n++; continue; } else if(sum%2==0 && target%2==1) { n++; continue; } else { return n; } } return 0; } };
http://www.jsqmd.com/news/94819/

相关文章:

  • Java毕设选题推荐:基于springboot高校奖助学金系统设计与实现基于springboot高校学生奖学金评定系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 实用指南:UE5笔记:OnComponentBeginOverlap
  • 豆包手机助手技术预览版发布,AI直接嵌入操作系统底层有何意义?会对行业产生什么影响?
  • 校园招聘会组织不再难,统筹安排让就业季更顺畅
  • 【毕业设计】基于springboot人才公寓管理系统基于springboot公寓管理系统(源码+文档+远程调试,全bao定制等)
  • JSON 与 MongoDB:直存对象的便利与隐性代价
  • 【Agent】MemOS 源码笔记---(5)---记忆分类
  • 靠谱的 AI 智能体获客落地指导,2025 年 12 月除了麟哥还有谁?
  • 销售助手-生产模型反馈闭环
  • 【原创代码改进】基于IVY(常青藤优化算法)-BiTCN(双向时域卷积网络)-BiGRU(双向门控循环单元)的多变量时间序列回归
  • NO17数据结构选择题考点|图
  • 2026年最强翻译工具——不是常规的机翻!
  • 智慧校园招投标流程中的时间管理要点:如何把握关键节点
  • cpp_studing_day1
  • 国产期刊被EI收录!首个影响因子12分,录用率67%,国人友好~
  • 质子交换膜燃料电池(PEMFC Simulink模型) (1)仿真内容:包括燃料电池静态模型、...
  • Java毕设选题推荐:基于springboot高校师资管理系统教师管理、学院管理、专业信息管理、职称调整管理、课程安排管理、进修学习管理、进修汇【附源码、mysql、文档、调试+代码讲解+全bao等】
  • openFuyao 容器平台快速入门:Nginx 应用部署全流程实操
  • Java毕设选题推荐:基于SpringBoot+Vue智能公寓管理系统基于springboot公寓管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 二维傅里叶变换算法及其完整流程:提取频谱波峰、反变换、相位角分布与解包应用于干涉图处理
  • 【课程设计/毕业设计】基于springboot果蔬种植销售一体化服务平台的设计与实现果蔬信息、果蔬入库【附源码、数据库、万字文档】
  • 【开题答辩全过程】以 基于java技术的校园一卡通系统的设计与实现为例,包含答辩的问题和答案
  • 动态删除表外键依赖
  • PSD-95抗体:如何为缺血性脑卒中治疗开启神经保护新纪元?
  • C# AOT编译后——调用其类库方法因顺序出错?
  • 【课程设计/毕业设计】基于Java的高校澡堂洗浴管理系统基于springboot高校洗浴管理系统【附源码、数据库、万字文档】
  • 学习成长道路上被忽视的“隐形杀手”,正在悄悄夺走孩子的健康
  • 9、Python 命名规范与代码优化实践
  • 从零开始将高德地图(卫星图+路网)接入 RViz 与 Mapviz 的保姆级教程 (C++,python,ros,自动驾驶)
  • Liquibase动态删除表外键依赖