2019-04

4.1
1.leaf-similar-trees (easy)
所谓的leaf similar就是说,二叉树的末端的node,从左到右的序列是一样的。
要点1:不论什么遍历,判断root == null的语句都要放在最开头。
要点2:用postorder把root1,root2各自遍历一遍,利用数组+=,最后再判断每一个元素是否为0。

2.groups-of-special-equivalent-strings (easy)
题意比较复杂,所谓的special equivalent是说,经过一种特殊变化的两个string相等,那他俩就是special equivalent。我认为做题的过程中要复现这个特殊变化。

误区1:元素有可能有重复,第一时间排除hashset,应该是类似于hashmap的数组,做int[26]然后有这个字符就++。
误区2:这是一个二维数组,要分两层,把它当成两道题,来定义变量,来保存结果。不要想着一步到位。
误区3:定义数组总是出错 一是不要忘记是int[],二是不要忘记加new。

这里很聪明的地方是用Arrays.toString把两个数组的结果合成了一个string。

  1. intersection-of-two-arrays (easy)
    要点1:array是固定大小的,size未知的时候,用arrayList
    要点2:Integer[]转成int[]没有直接的方法,目前觉得arrayList变成int[],可能需要一个for循环。
    要点3:学习一下写法:
if(nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
       return new int[0];
}

4.2

  1. island-perimeter (周长) (easy)
    首先这是一个数学问题,4边的总个数减去公用的边。
    其次,要找一个方格四面的临近方格,很麻烦(因为同时有四个,而且循环的话会重复),所以单向的看,也总能遍历到的,这样的话就是只有两个量需要maintain。

这里注意index和array size的大小比较要先进行,同时要具体分析这个不等式是啥样子。

4.3

  1. meeting-rooms (easy)
    给几个时间段的meeting,来决定一个人能否都参加。
    要点:先根据开始时间做quicksort,然后核心是前一个meeting的结束时间早于下一个meeting的开始时间。

  2. palindrome-permutation (easy)
    注意:char haha : s.toCharArray()

  3. majority-element (easy)
    摩尔投票法。其实就是细分,如果在整体中是多数,那么细分到2个元素,也应该占一个(to some sense)

4.7

  1. missing-number (easy)
    已知是0到n的自然数,从给的array中,找出miss的那个数。
    数字array的问题多考虑异或,异或的辅助变量应该是0。
    abb =a

  2. best-time-to-buy-and-sell-stock (easy)
    遍历的时候要实时maintain一个profit,那么实时的股价减谁呢,所以还要maintain一个实时的最低股价。

  3. lowest-common-ancestor-of-a-binary-search-tree (easy)
    binary search tree的核心就是search,利用值的大小关系分情况讨论。

4.8

  1. implement-strstr (easy)
    自己实现一个string的indexOf。
    注意一:string相当于有个小尾巴,用substring的时候,endIndex要多加一。
    注意二:string之间的比较尽量用equals()。
    注意三:写for循环首先有个意识,index会不会超?然后取一个Index的最大值,确定这个边界的具体值。

要点一:不让用substring怎么办?类似于sliding window。

  1. count-and-say (easy)
    要点一:从题意来看,下一个依赖上一个,只能递归,先写递归基,然后处理n-1的情况。
    要点二:for循环处理不了末尾的状态,要放在for循环后面处理。这里同时maintain i和i+1的情况,那么corner case就是length为1的时候,要注意。

  2. sqrtx (easy)
    因为答案是整数,所以判断符合的条件是 input <= x / input && input + 1 > x / (input + 1)
    corner case是这个<=的=

4.10

  1. largest-perimeter-triangle (easy)
    从array的多个element中找出能构成三角形的三边的最大的周长。
    困惑是不知道什么顺序来遍历。

先找数学关系:最长边<另外两遍之和
怎么知道最长边和次长边?这就需要先sort,从最大的可能性开始一个一个试,看能不能符合三角形的要求。

注意:要适应for循环倒着写,for(int i = len - 1; i > = 0; i --) {}

  1. intersection-of-two-arrays-ii (easy)
    注意:sort了之后有点不知所措,要利用index和index++/index--

  2. sort-array-by-parity-ii (easy)
    一是找到数学关系,二是双指针也可以考虑奇偶数。

4.12
1.add-binary (easy)
用string表示二进制,做加法。注意string里面的char要 减'0'才是Int。

  1. palindrome-linked-list (easy)
    先把一般reverse,再去判断是否palindrome。

4.14

  1. reverse-linked-list (easy)
    iteratively: 全局变量两个,一个是head本身,一个是newHead = null,局部变量一个是head.next,是为了把head.next保留下来。
    recursively: same,唯一的区别是最后两步可以直接用递归调用的赋值来实现。
    void和有返回值的递归,其实写起来没有区别,记得return就可以。

  2. unique-email-addresses (easy)
    经典的string handle类型。

4.16

  1. flipping-an-image (easy)
    一个极端复杂的读题过程。。有一些小型收获。
    一是,给一个array,1要变成0,0不变 => 去和1做异或(^= 1)
    二是,给一个array,首尾 两个指针,就是array[i]和array[n-1-i]
    三是,需要考虑array有奇数个 偶数个元素的时候,也就是多考虑奇数个元素的array的中间拿一个,可以用
    j < n / 2 + n % 2或者j * 2 < n

  2. plus-one (easy)
    核心是:反着的,要注意。
    把一个array当成一个int一样去加1,首先只考虑末尾是不是9,然后这个问题可以一直推广到最高位,只要有不是9的,就直接可以输出了。
    重要的是,array当成一个整数,优先考虑for循环从n-1到>=0去遍历。注意array的Index和整数的数位是反着的。

  3. add-strings (easy)
    这是一个进阶版本了,从加1变成了两个数相加。
    这里可以用i,j 二元的for循环。
    注意string.charAt这种方式无法对string进行修改,一般都采用StringBuilder。或者用toCharArray()来转换,往回转换的时候必须用String.valueOf(chars)

4.17

  1. find-all-numbers-disappeared-in-an-array (easy)
    array有两个东西,一个是nums[i],也就是值,另一个就是i,也就是Index。要把这两个东西区分开,在In place的问题中,我们就有了double的virtual space。
    没有要求排序的题里,不要尝试去得到一个排序的结果,同时quicksort也需要两重for循环。

  2. reverse-vowels-of-a-string (easy)
    一个string只reverse元音字母,直观的就是用stack。但是这种题,inplace也可以用two pointers。

判断是否是元音字母,如果一个一个写if太麻烦,把所有可能元音拼成一个string用contains来判断比较好。

  1. first-unique-character-in-a-string (easy)
    题设说只有26个小写字母,就暗示着可以用int[26]作为一个hashset。
    尽量不要用双重for循环,分别写两个for循环可以保证O(n)。

4.21

  1. power-of-two (easy)
    判断是否是2的N次方。1是2的0次方,是个递归基,0不是2的N次方。
    考虑二进制,2的N次方的形式是10000.。return ((n & (n-1)) == 0 && n > 0);

  2. power-of-three (easy)
    1是3的0次方。

  3. paint-house (easy)
    三种颜色刷房子,相邻房子颜色不能重复,最终的cost要最小。
    这是一道DP题,因为三种颜色的选择导致的cost是一路积累来的。

这里有个学习到的trick是,两个数组也可以直接互换,用的是引用。(但如果两个都引用同一个数组的地址空间,可能会互相干扰,所以要互换一下)。

4.22

  1. maximum-depth-of-binary-tree (easy)
    递归for now

  2. second-minimum-node-in-a-binary-tree (easy)
    这个题,给了题设就可以分析出来,root.val是全局最小值。
    分治法可以解决,但是注意,递归一定要有递归基。当相等的时候要去找下一个candidate。

DFS遍历也可以。直观的理解就是,要找离全局最小值最接近的那个值
注意比大小的时候,Long.MAX_VALUE,然后最终return的时候(int)类型转换。

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

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,343评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,797评论 0 38
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,320评论 0 9
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 6,960评论 0 9
  • 要了解军事头条这个APP,首先要了解的是其母公司铁血网。铁血网是真正由军迷创造和支持,一步一步发展成中国最大的军事...
    迷途未返啊阅读 654评论 0 0