摘要: 思路很简单,关键怎么把代码写得干净 去掉尾部所有空格" ",然后找到第一个" ",返回它到尾部的长度即可 可以用trim()去掉首尾空格,也可以自己写一个while 可以用lastIndexOf()从后面找第一个" ",也可以自己写while 阅读全文
posted @ 2019-05-29 09:01 南山南北秋悲 阅读(129) 评论(0) 推荐(0)
摘要: lc 14 Longest Common Prefix 利用substring()&indexOf()可以大大减少代码量 思路如下: 每次求strs[i]和当前最长公共前缀pre(即0~i-1的公共前缀)的公共前缀 用indexOf()找第一次匹配上的位置 若返回值不为0,就将pre最后一位丢掉,这 阅读全文
posted @ 2019-05-27 19:06 南山南北秋悲 阅读(111) 评论(0) 推荐(0)
摘要: 两个for 外层for负责处理原字符串 内层for负责处理匹配字符串 阅读全文
posted @ 2019-05-27 12:57 南山南北秋悲 阅读(190) 评论(0) 推荐(0)
摘要: 利用中位数的概念,中位数就是将一组数分成2等份(若为奇数,则中位数既不属于左也不属于右,所以是2等份),其一组数中任何一个元素都大于等于另一组数 那么我们是不是只要一左一右配合着插入,就保证了差值+-+-+-的要求? 由于题目输入限制了,必定存在解,所以此处我们不需要担心如果重复中位数太多,出现一左 阅读全文
posted @ 2019-05-26 15:34 南山南北秋悲 阅读(167) 评论(0) 推荐(0)
摘要: 用堆解 两种实现方法 1)最大堆,o(klogn) 直接将原数组建堆 o(n) 然后弹出k次 (klogn) 返回最后一次poll()的值 2)最小堆 用数组前k个数建堆 o(k) 剩下n-k,依次插入堆中然后推出堆顶元素o((n-k)logk) 剩下的k个肯定是前k大的数,只要返回此时堆顶即可 阅读全文
posted @ 2019-05-26 15:24 南山南北秋悲 阅读(117) 评论(0) 推荐(0)
摘要: 用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]的 阅读全文
posted @ 2019-05-26 15:04 南山南北秋悲 阅读(186) 评论(0) 推荐(0)
摘要: 记录0的个数 有两种实现方法 1)保证index之后都是0 index初值为nums.length 碰到0就swap(i, index) 注意!别忘了i减一,以防漏掉这种情况:换过来的index所指元素值为0 2)保证index之前没有0 index初值为0 碰到不是0就将当前nums[i] 赋值给 阅读全文
posted @ 2019-05-26 14:50 南山南北秋悲 阅读(158) 评论(0) 推荐(0)
摘要: 两种解法 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 阅读全文
posted @ 2019-05-26 14:19 南山南北秋悲 阅读(156) 评论(0) 推荐(0)
摘要: lc88 Merge Sorted Array 因为两个array都已经排好序了,每次取两者间较小的放入新array中,当一个array空了,直接把另一个array剩下的全放入新array即可 阅读全文
posted @ 2019-05-26 14:01 南山南北秋悲 阅读(141) 评论(0) 推荐(0)
摘要: lc238 Product of Array Except Self 遍历两次数组 用一个res[] 记录答案 1) 第一次,从左往右遍历 res[i] 记录0~i-1的乘积 2) 第二次,从右往左遍历 res[i] *= right right *= nums[i] 注意两者顺序,right初值为 阅读全文
posted @ 2019-05-25 10:09 南山南北秋悲 阅读(207) 评论(0) 推荐(0)