首页 > 其他分享 >剑指Offer57 - 数学/滑动窗口(双指针)

剑指Offer57 - 数学/滑动窗口(双指针)

时间:2023-03-06 11:46:15浏览次数:47  
标签:target int Offer57 long vector 数学 滑动 指针

1. 题目描述

和为s的连续正数序列



2. 思路

O(N) 数学做法。

  1. 等查求和公式,求根公式:\(\frac{-b \pm \sqrt{b*b - 4*a*c}}{2*a}\)
    求根公式在不少题目中的优化做法可能用到

O(N) 双指针

1



3. 代码,数学做法

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {
        vector<vector<int>> res;
        for(int i = 1; i < target; i ++ ) {
            long long k = (long long)target * 2 + (long long)i * i - i;
            int s = (sqrt(1 + 4 * k) - 1) / 2;
            if((long long)s * s + s - k == 0) {
                vector<int> path;
                for(int j = i; j <= s; j ++ )   path.push_back(j);
                res.push_back(path);
            }
        }
        return res;
    }
};

/* 等差数列和公式
[a,...,b]
s = (b + a) / 2 * (b - a + 1)
s = (b + a) * (b - a + 1) / 2
b^2 - a^2 + a + b = s * 2
b^2 + b = s*2 +a^2 - a
*/


4. 代码,双指针

标签:target,int,Offer57,long,vector,数学,滑动,指针
From: https://www.cnblogs.com/ALaterStart/p/17183173.html

相关文章

  • 指针带*的一些发现
    下面的一个简单代码:#include<stdlib.h>#include<string.h>#include<string>#include<stdio.h>#include<iostream>usingnamespacestd;voidddd(char*str){......
  • 双指针
    双指针同向双指针能够实现跳跃寻找,适用于寻找含有某一特性区间,比如最长相同区间,最长不重复区间不重复区间可以用一个数组t[N]来表示,如果其中元素大于1,说明有重复intr......
  • 通过基类指针访问派生类
    可以使用多态性来通过基类指针访问子类。当一个基类的指针指向一个派生类的对象时,可以使用以下方式访问子类。使用虚函数将函数声明为虚函数,并在派生类中重写该函数,然后......
  • golang的指针变量,智商声明没有赋值,不能直接 *p=123之类的
    packagemainimport"fmt"funcmain(){ //申明指针的时候,如果没有指向某个变量,默认值为nil //不能直接进行操作,包括读写 //而用new返回的是有默认值的指针,为数据......
  • 相同的树(树)、买卖股票的最佳时机 II(贪心、数组)、下一个排列(数组、双指针)
    相同的树(树)给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入:p=[......
  • Unity无限滑动列表
      //解释下Start里的代码 ......
  • 迷失的this指针
    在调试客户崩溃dmp文件时,已经恢复了异常栈,需要查看当前的对象,但是this指针如下 很明显,这个值不对,ecx指针的值被修改做它用了。没关系,可以查看函数汇编,看看this指针保存......
  • C/C++ 数据结构优先级队列的实现(使用二级指针)
    #include<iostream>#include<Windows.h>#include<iomanip>//优先级队列的实现usingnamespacestd;#defineMaxSize5typedefintDataType;//队列中的元素类型......
  • 填充每个节点的下一个右侧节点的指针
    填充每个节点的下一个右侧节点的指针给定一个二叉树:structNode{intval;Node*left;Node*right;Node*next;}填充它的每个next指针,让这个指针指向其下一个右......
  • 指针和数组笔试题解析
    在大多数情况下,数组名就是数组首元素的地址,但是有两种特殊情况:一、sizeof(数组名):当数组名单独放在sizeof内部,指的是整个数组二、&数组名:取的是整个数组的地址,但是结果和首......