6.23 - easy总结6

409. Longest Palindrome:用hashtable,逢双则用,逢单则加count-1,最后再加一
412. Fizz Buzz:没什么写的
414. Third Maximum Number: 记录最大值和第二大的值和第三大的值,然后每个值进来先和最大值比较,小于最大值再和第二大的值比较,依此类推,通用的方法是创建一个最小堆,每来一个数就和堆顶比较一下, 如果大于堆顶就pop and push,最后的堆顶就是最小值
415. Add Strings: 注意carry的数就可以了
422. Valid Word Square: 两层循环,只是内层循环的时候要注意当前list的长度
434. Number of Segments in a String:又是一道意义不明的题目
437. Path Sum III: 要对所有的节点都做一次path sum,然后path sum的计算是通过简单的backtracking来做
438. Find All Anagrams in a String:有点fix window 的意思,fix window的解法就是左边减一位,右边加一位,检查当前的范围。还有一个要点就是字符可以map到array上来进行比较
441. Arranging Coins: 典型的数学题吧,(1+k)*k/2 是计算n的公式,所以对k进行binary search找到合适的k就可以了
447. Number of Boomerangs: 从程序上来讲这题不难,把其中一个点作为anker,然后计算其它点到这个点的距离记录同距离点的个数k,然后对于所有同距离的点其实就是进行一个排列P(2,k) = k*(k-1),最后对所有点求和就可以了。我一开始也没什么思路,其实是想太复杂了,有时候先用暴力求解,然后再考虑优化就可以了
448. Find All Numbers Disappeared in an Array: 首先这题要用hash,但是hash要用额外空间,而array本身其实就提供了hash的条件。所以把所有数都改成负数来记录hash过的值。
453. Minimum Moves to Equal Array Elements: 又是个数学题,没思路,在math题里面就是要找规律,规律1: sum + m * (n - 1) = x * n , 规律2: x = minNum + m,最后解个方程得到sum - minNum * n = m
455. Assign Cookies: greedy的方法,让需求更多的小朋友先被满足。
459. Repeated Substring Pattern: 这题比较朴素的方法是,找出len(s)%p==0的所有为prime的p的值,然后用len(s)/p也就是变成了可能重复substring的长度,然后再逐个比较,也算是自己亲手写出来了。比较tricky的方法是把(s+s)[1:-1],把s双倍后斩头去尾,然后看看s在不在这个string里,如果在的话,那么说明它可以表示成某个substring的repeat,不在的话,就不可以。
461. Hamming Distance: xor然后count有多少个1
463. Island Perimeter: 计算每个cell的周长然后加起来
475. Heaters: 对每一个房间进行二分搜索在heater中的位置,然后求最小距离
476. Number Complement: 对number中的每一个1和0进行相应的翻转。可以用res += 1 << pos的方式来补充高位1
485. Max Consecutive Ones: 记录左边界和右边界就可以了
492. Construct the Rectangle: sqrt一下,然后依次减少吧。

你可能感兴趣的:(6.23 - easy总结6)