LeetCode 38. 外观数列(易) 动态规划,正向循环,更新保留每次first_str,作为下一次迭代的字符串,遍历字符串数组,如果前一个和后一个相同则继续,记录相同的个数count + 1,不相同,则更新前面相同的临时temp以及重置count = 1。 最后一个数要分情况单独讨论更新temp,并初始化所有与之相关的参数。方便下一次迭代。 2020-03-09 LeetCode 字符串与哈希表
LeetCode 37. 解数独(难) 约束编程:基本的意思是在放置每个数字时都设置约束。在数独上放置一个数字后立即排除当前行、列和子方块对该数字的使用。这会传播 约束条件 并有利于减少需要考虑组合的个数。 回溯算法:让我们想象一下已经成功放置了几个数字在数独上。但是该组合不是最优的并且不能继续放置数字了。该怎么办? 回溯。意思是回退,来改变之前放置的数字并且继续尝试。如果还是不行,再次回溯。 2020-03-09 LeetCode 回溯算法
LeetCode 36. 有效的数独(中) 首先,让我们来讨论下面两个关键问题,想清楚以下两个问题,这道题就很好理解并解决了: 1、如何枚举子数独? 可以使用 box_index = (row / 3) * 3 + columns / 3 ,其中 / 是整数除法。 2、如何确保行 / 列 / 子数独中没有重复项? 可以利用 value -> count 哈希映射来跟踪所有已经遇到的值。 2020-03-09 LeetCode 字符串与哈希表
LeetCode 35. 搜索插入位置(易) 减治:通过不断排除非目标元素,在循环结束之后,最后剩下的那个元素,必然是我们想要的目标元素。减治思想特点,将二分法查找区间,从以前的[left, mid]、mid、[mid, right] 三个部分改成两个区间。 2020-03-09 LeetCode 二分查找和搜索
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置(中)& 剑指offer 面试题53 - I. 在排序数组中查找数字 I(易) 看到有序数组,无论数组里面是字符还是数字,都可以用二分查找解决。总体算法工作过程与线性扫描方法类似,除了找最左和最右下标的方法。这里我们仅仅做几个微小的调整,用这种修改过的二分查找方法去搜索这个排过序的数组。首先,为了找到最左边(或者最右边)包含 target 的下标(而不是找到的话就返回 true ),所以算法在我们找到一个 target 后不能马上停止。我们需要继续搜索,直到 lo == hi 2020-03-09 LeetCode 剑指offer 二分查找和搜索