2026/4/18 19:33:58
网站建设
项目流程
公司是否可以做多个网站,王建设个人网站,邓海舟网站建设教程,网站版面特点Problem: 754. Reach a Number 到达终点数字 解题过程
耗时100%
通过观察下面的式子#xff0c;可以发现可以向左移动多次#xff0c;而且每次向左移动#xff0c;相当于向右少移动偶数次#xff0c; 1 - 2 3 123 - 2*2#xff0c;
-123 123 - 1 * 2 #xff0c;
…Problem: 754. Reach a Number 到达终点数字解题过程耗时100%通过观察下面的式子可以发现可以向左移动多次而且每次向左移动相当于向右少移动偶数次 1 - 2 3 123 - 2*2-123 123 - 1 * 2 1 2 3 4 - 5 1 2 3 4 5 - 2 * 5所以向左移动相当于减去一个偶数所以最后的结果是 123。。。k - 偶数 (1k)*k/2 - 偶数答案首先找到满足条件的不需要减去的数字然后找到累加和target的n奇数-偶数奇数偶数-偶数偶数所以 被减数 和 差 的奇偶性相同不满足的话n而且被减去的偶数一定可以通过12。。。k这些数字凑出来具体的可以翻看官方题解的就像12: 1 2 - 3 4 - 5 6 7偶数可以通过-3 -5凑出来// 1-23 2 // 12 3 // -123 4 // 1 2 3 4 - 5 5 // 1 2 3 6 // 1 2 3 - 4 5 7 // 1 2 - 3 4 - 5 6 7 12Codeclass Solution { public: int reachNumber(int target) { // 1-23 2 // 12 3 // -123 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 * (n1) / 2.0f; double f2 (n1) * (n2) / 2.0f; if(f1(double)target) { return n; } if(f2(double)target) { return n1; } while(f1 target) { n; f1 n * (n1) / 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 - midtarget (mid%20)) return n; // if(lr) break; // if(sum - mid target) { // r mid-1; // } else { // l mid1; // } // } if(sum%21 target%20) { n; continue; } else if(sum%20 target%21) { n; continue; } else { return n; } } return 0; } };