算法分析 [n值加法、平方加法] 2019-03-07

1. n值加法

167. 两数之和 II - 输入有序数组 Two Sum II - Input array is sorted medium
双指针(快fast 慢slow 指针),两数相加值大于目标值,e--,值小于目标值,s++,相等则返回

15. 获取数组中3个值相加等于目标值的组合(每个值只能用一次),3Sum medium
[重要] 先排序
遍历第一次,需要考虑重复值if(i>0&&nums[i]==nums[i-1]) continue;
这种情况说明和前一个值相等,前一次算过了,不需要再计算了
减去值,得出剩下的值,然后用 2Sum 方式计算
2Sum返回所有集合,需要考虑值与前值相等无需重复计算,可以快速略过

while(lo<hi && nums[lo] == nums[lo+1]) lo++;
while(lo<hi && nums[hi] == nums[hi-1]) hi--;
lo++;
hi--;

16. 获取数组中3个值相加最接近于目标值 3Sum Closest medium
和3sum一样,只是要判断最接近值

    private int max(int target, int src, int dst) {
        return (Math.abs(dst - target) < Math.abs(src - target)) ? dst : src;
    }

653. 二叉查找树查找两个节点相加值为目标节点 Two Sum IV - Input is a BST easy
法1. 时间复杂度O(n) 空间复杂度O(n)
使用中序遍历后保存列表,进行sum2计算
法2. 时间复杂度O(n) 空间复杂度O(n)
使用BFS,利用QueueHashSet,每次遍历都出Queue,使用set.contains(k - node.val)判断是否存在目标值,如果不存在,将当前值入HashSet,并且入Queue

112. 是否根节点至叶子节点的路径存在一个等于目标值 Path Sum
法1. 时间复杂度O(n) 空间复杂度O(1)
使用递归,每次传入的sum=sum-root.val,每次递归node.left||node.right

113. 根节点至叶子节点的路径存在一个等于目标值所有节点 Path Sum II
法1. 时间复杂度O(n) 空间复杂度O(n)
使用backtrace,用一个list做记录,每次进一个节点都add,每次left||right完成后remove

129. 统计所有根节点至叶子节点的路径的总和 Sum Root to Leaf Numbers
法1. 时间复杂度O(n) 空间复杂度O(n)
用一个list做记录,每次进一个节点都add,每次left||right完成后remove
法2. 时间复杂度O(n) 空间复杂度O(1)
将之前的值 sum*10 + node.val 进行递归传递,这样可以减少空间复杂度

2. 平方加法

367. 校验是否存在最优的平方数直接等于目标值 Valid Perfect Square easy
法1. 时间复杂度O(1) 空间复杂度O(1)
使用平方公式对目标值求解,先得出一个double值,强转int,再通过int*int与目标值对比
法2. 时间复杂度O(logn) 空间复杂度O(1)
使用折半法,靠近目标值,但是由于m*m可能导致int的越界问题,可以考虑使用long来处理
法3. 时间复杂度O(sqrt(n)) 空间复杂度O(1)
平方的计算公式=A square number is 1+3+5+7+...,从1开始每次对其值+2,将目标值每次减去累加至,最后值如果减为0,说明是平方数
法4. 时间复杂度O(log(n)) 空间复杂度O(1)
newtoon 公式 => i = (i + x / i) / 2

69. 根号公式求解 Sqrt(x) easy
法1. 时间复杂度O(logn) 空间复杂度O(1)
使用折半法,靠近目标值,但是由于m*m可能导致int的越界问题,可以考虑使用long来处理,如果都没有找到,返回r或者l
法2. 时间复杂度O(log(n)) 空间复杂度O(1)
newtoon 公式 => i = (i + x / i) / 2

50. 值的n次方 Pow(x, n) medium
要考虑正整数和负整数边界问题,负整数比正整数多1
法1. 时间复杂度O(n) 空间复杂度O(1)
逐层进行n次累加,会出现Time Limit Exceeded
法1. 时间复杂度O(logn) 空间复杂度O(1)
采用 同值平方 具备 折半的特性, 如果 n次方的n是奇数, 需要独立*一次, 其余可以快速折半

372. Super Pow

633. 两数平方加法等于目标值 Sum of Square Numbers easy
法1. 时间复杂度O(sqrt(n)logn) 空间复杂度O(1)
使用Math.sqrt返回的double是否实是整形的方式来做判断
法2. 时间复杂度O(sqrt(n)logn) 空间复杂度O(logn)
减去第一个平方值后,剩下的值用折半来处理,考虑使用long来处理放置越界,因为 int*int 会导致越界

279. 最短的平方和加法等于目标值 Perfect Squares medium
法1. BFS 时间复杂度O(n^2) 空间复杂度O(n)

  1. 先求出构成值的所有平方和列表,下面是所有平方的构成方法
    private List<Integer> generateSquares(int n) {
        List<Integer> squares = new ArrayList<>();
        int square = 1;
        int diff = 3;
        while(square <= n) {
            squares.add(square);
            square += diff;
            diff += 2;
        }
        return squares;
    }
  1. 使用BFS,将值减去初始平方数开始,判断是否为0,余数加入queue
  2. 每次队列不为空最短路径都加1
  3. 然后再重新遍历平方和列表
  4. 需要标记已经使用过的余数,减少重复遍历

法2. dp
TODO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,143评论 0 3
  • 线性表中的双指针法是指通过两个指针(游标)来指示线性表中的元素的方法。双指针的使用本身并没有什么神奇之处,但是通过...
    Like_eb56阅读 513评论 0 0
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,424评论 0 1
  • 本书的作者是杨鹏,一个新东方老师。这本书已经历史悠久,书的序言都有两版,这是06年的版本,似乎这之后还有一个版本1...
    冰洛洛阅读 503评论 0 0
  • 文 / 无影 一、问问自己: 可能听到的回答:——爸妈让学的。爸妈为啥让学?——学校让学的。学校为啥让学?——国家...
    梅心无影阅读 1,438评论 8 21