坚持学做算法题
leetcode350:给定两个数组求其交集
进阶1:如果给定数组是排好顺序的,怎样优化你的解法呢
进阶2:如果其中一个数组的长度远远小于另一个数组,使用哪个解法更好
进阶3:,,,
1:求交集可以看成是一个映射题,采用map的方式记录长度更小的数组的信息,《元素key:出现的次数value》
学会使用一个map的新方法:getOrDefault(Object key, Object default) 输入一个key,如果存在则返回value,否则给该key值一个默认value
学会从一个更长的数组中提取出需要的部分,Arrays.copyOfRange(数组,int from, int to)
2:对两个排好序的数组,找相同值时,可以使用双指针移动法
学会利用递归法取到传入两个数组中的min和max长度,无需创建新数组占用空间
int[] sendTwoArrays(int[] nums1, int[] nums2) {
if(nums1.length > nums2.length) {
return sendTwoArrays(int[] nums2, int[] nums1)
}
}
这样就保证了传入的一定是nums1长度最小。
code14 求字符串数组最长公共前缀
注意传入值的校验,避免多余的循环比较。
code122 买卖股票的最佳时机2
code06 Z字形变换(传一个字符串和一个要求变换的行数)
注意:
1、行数为1时,直接返回原字符串就行了
2、因为初始化字符串数组时,默认值为null,如果不使用Arrays.fill(arr, “”)填充数组值的话,要注意盘空,否则后面用append拼接的时候,会混入null
2.1、判空两个地方
a、每个下标第一次赋值时:
if (StringUtils.isEmpty(strs[cur])) { strs[cur] = String.valueOf(s.charAt(i)); } else { strs[cur] += s.charAt(i); }
b、append时str为null就判断过滤掉不进入