sunwen
sunwen
笔者自16年毕业至如今,开发 `ios` 三个月,`Android` 七个月。自觉学习的知识严重不足,但偶尔记点开发的心得。因此打算整理一下这些笔记,月为单位,特此记录。 2016.7 -- 2016.9 `ios`开发时期三个月,暂且不表。 ###2017.10 开始熟悉项目源码,几个学习的关键点:`handle`, `gradle`, 匿名内部类和泛型, `adapter`, `Layoutinflater.inflate` 其中项目用到的Kvo绑定是借鉴ios的一套框架,可以使用 `databinding` 加以替换。 反射机制, `AppBarLayout` [关于Android Drawable的微技巧阅读](http://blog.csdn.net/sinyu890807/article/details/50727753) 几个要点: 1. `drawable`文件夹存放图片文件,`.png`, `.jpg`. `.9.png`, `selector`的`xml`文件,而`mipmap`只用来存放应用程序的图标。 2. 根据经验,公司的设计不可能每个尺度的图都能给到。图片最佳的放置文件夹是`drawable-xxhdip`。 ```...
最长递增子序列: 动态规划和LCS(最长公共子序列) 子序列和子串的区别:子序列不连续,字串连续。 这个题两种解法 1. 动态规划 2. 复制数组并排序,求两数组的最长公共子序列。 下面分别做简单介绍: ## 动态规划 O(n^2)时间复杂度。想求的array[0, i]的最大递增子序列。则计算array[0, i- 1]中以**各元素为最后元素的最长递增序列**。与array[i]比较, 因为不连续。 ``` def longest_increasing_subsequence_one(array): temp_array = [1] * len(array) for index, _ in enumerate(array): for...
找到无序数组中的第k大元素, kth_Largest_element_in_an_array。 常见的解决方案有两种,快速排序思想和堆排序思想,简单记录一下过程,顺便复习快速排序和堆排序过程。 ## 快速排序思想 快速排序的理论基础是随机取一个数,大的放左边,小的放右边,完成一趟排序。 分别对左右两边递归做相同的分割,最后还剩一个数,自然有序,完成快速排序。 那么找第k大的元素,即完成一次排序后,随机找出的这个数的前面有 k -1个数,那么就是第k大个元素。 下标: k - 1 = index. 否则再根据下标关系判断在k在左边还是右边,继续如上操作。 快速排序完成一次排序的函数如下: ``` # 最后一个数为支点,从小到大排序 def partition_two(array, lo, hi): i = lo j =...
为什么这里仅仅是后序遍历?因此后序遍历稍微要麻烦一点,默认对其他五种遍历已经了解(递归和非递归的前序, 中序遍历,还有层次遍历。 这里有两种情况, 1. 层次遍历是树的广度优先搜索,借助队列实现。如果要分层输出,那么多加一个变量记录当前层的节点个数。 2. 其余三种的非递归遍历都是借助栈实现。 ### 递归后序遍历 ``` def post_order_traversal_tree(root): if root is None: return post_order_traversal_tree(root.left_child) post_order_traversal_tree(root.right_child) print(root.data, end=" ") ``` 下面着重分析一下后序的非递归遍历 ### 非递归遍历(一) 思路:对于任一节点将其入栈。若左右节点都已访问过,则访问该节点并出栈。否则将右子树入栈,左子树入栈, 保证左子树在右子树之前访问。 ``` def...