05 2019 档案
摘要:lc290 Word Pattern 有点类似lc205 同形字符串,思路也一样,就是比较相同字母映射的对象是否相同 题目提醒了,这是双射,即一一对应,比较容易想到的是用两个hashmap,源字符串和目标字符串分别做key值 不过可以参考lc205解法,只用一个hashmap, 这里有个小trick
阅读全文
摘要:lc205 Isomorphic Strings 思路就是检测s中相同字母在不同位置映射到t中相应位置的字母是否相同 举例来说,egg adj,第一个g对应位置的字母是d,而第二个g对应位置的字母是j,返回false 怎么检查是否相同呢? 最容易想到的就是HashMap<Character, Cha
阅读全文
摘要:两个for 第一个for将每一个元音依次存放进一个char数组 第二个for,每检测到元音,就从char数尾部开始,依次赋值 如何检测元音呢?当然写一个冗长的if(),不过我们有更好的选择 hashset的contains, 或者String自带的contains, 或者建一个int[128],因为
阅读全文
摘要:lc151 Reverse Words in a String 利用split(),将String分成一个String[],可以用正则表达式"\\s+"(第一个\转义,\s表示空格,+表示多个空格),也可以直接用" ",第二种方法快一些 然后按题意翻转即可,从后面遍历String,一次将元素放入新S
阅读全文
摘要:lc344 Reverse String 双指针, 一个在前,一个在后,交换两者所指元素
阅读全文
摘要:lc383 Ransom Note 两个for 第一个记录sourse字符串每种字母出现次数 第二个看现有字母是否能够填满target
阅读全文
摘要:lc387 First Unique Character in a String 两种思路 1)统计各个字母出现的次数,然后再遍历一次原数组,输出只出现一次元素的index 可以用hashmap统计次数,也可以申请一个大小为26的int数组 2)双指针 一个快指针,向后遍历统计字母出现次数,一个慢指
阅读全文
摘要:思路很简单,关键怎么把代码写得干净 去掉尾部所有空格" ",然后找到第一个" ",返回它到尾部的长度即可 可以用trim()去掉首尾空格,也可以自己写一个while 可以用lastIndexOf()从后面找第一个" ",也可以自己写while
阅读全文
摘要:lc 14 Longest Common Prefix 利用substring()&indexOf()可以大大减少代码量 思路如下: 每次求strs[i]和当前最长公共前缀pre(即0~i-1的公共前缀)的公共前缀 用indexOf()找第一次匹配上的位置 若返回值不为0,就将pre最后一位丢掉,这
阅读全文
摘要:两个for 外层for负责处理原字符串 内层for负责处理匹配字符串
阅读全文
摘要:利用中位数的概念,中位数就是将一组数分成2等份(若为奇数,则中位数既不属于左也不属于右,所以是2等份),其一组数中任何一个元素都大于等于另一组数 那么我们是不是只要一左一右配合着插入,就保证了差值+-+-+-的要求? 由于题目输入限制了,必定存在解,所以此处我们不需要担心如果重复中位数太多,出现一左
阅读全文
摘要:用堆解 两种实现方法 1)最大堆,o(klogn) 直接将原数组建堆 o(n) 然后弹出k次 (klogn) 返回最后一次poll()的值 2)最小堆 用数组前k个数建堆 o(k) 剩下n-k,依次插入堆中然后推出堆顶元素o((n-k)logk) 剩下的k个肯定是前k大的数,只要返回此时堆顶即可
阅读全文
摘要:用dp解 1)up定义为nums[i-1] < nums[i] down nums[i-1] > nums[i] 两个dp数组, up[i],记录包含nums[i]且nums[i-1] < nums[i]的最长子序列长度 down[], 记录包含nums[i]nums[i-1] > nums[i]的
阅读全文
摘要:记录0的个数 有两种实现方法 1)保证index之后都是0 index初值为nums.length 碰到0就swap(i, index) 注意!别忘了i减一,以防漏掉这种情况:换过来的index所指元素值为0 2)保证index之前没有0 index初值为0 碰到不是0就将当前nums[i] 赋值给
阅读全文
摘要:两种解法 1)记录0和1的个数 然后按照记录的个数将0和1重新放入原数组,剩下的补2 2)双指针left,right left表示0~left-1都为0,即i之前都为0 right表示right+1~nums.length都为2,即j之后都为2 遍历原数组 a)遇到为0的就把当前nums[i]与nu
阅读全文
摘要:lc88 Merge Sorted Array 因为两个array都已经排好序了,每次取两者间较小的放入新array中,当一个array空了,直接把另一个array剩下的全放入新array即可
阅读全文
摘要:lc238 Product of Array Except Self 遍历两次数组 用一个res[] 记录答案 1) 第一次,从左往右遍历 res[i] 记录0~i-1的乘积 2) 第二次,从右往左遍历 res[i] *= right right *= nums[i] 注意两者顺序,right初值为
阅读全文
摘要:lc352 Data Stream as Disjoint Intervals 可以用treemap解 key保存interval的start,value保存interval的end。分别找出当前val的lowerKey(treemap中>val的最小key值,没有就返回null)和higherKe
阅读全文
摘要:lc57 Insert Interval 仔细分析题目,发现我们只需要处理那些与插入interval重叠的interval即可,换句话说,那些end早于插入start以及start晚于插入end的interval都可以保留。我们只需要两个指针,i&j分别保存重叠interval中最早start和最晚
阅读全文
摘要:lc287 Game of Live 难点在于不能使用额外的空间。 观察到数组中每一个元素要么为1要么为0,32位int只用了一位,可以利用bit操作,将第二次state存储到int变量的倒数第二位中。例:board[i][j] = 3, 换成二进制就是一堆0最后两位是11,表达的含义就是当前状态c
阅读全文
摘要:这一题,我们使用了分治法。 首先看时间复杂度为o(n^2),比较naïve的方法: 使用一个数组sum[],长度为原数组长度+1,每一个元素sum[i]为原数组中index0~i-1之和,显然当sum[j] – sum[i]就是i~j-1之和,于是我们只需要两个for来遍历所有[i, j],并且比较
阅读全文
摘要:leetcode 321 Create Max Number greedy的方法,由于有两个数组,我们很自然的想到从数组1中选i个数,数组2中选k-i个数,这样我们只需要遍历max(0, k-数组2长度n) ~ 数组1长度,然后保存合并i和k-i这两个部分之后得到的最大值即可。 那么还剩下这几个问题
阅读全文

浙公网安备 33010602011771号