掘友等级
写博客的好处,就是不太会自欺欺人。希望能写出有意思的。当然这是小号 获得徽章 0
发现一篇博客,好像喊话
关于 Leetcode,
大概是 Github 上面那些......星的算法题代码实现,
可能没那么的有必要存在
因为 Leetcode 自带了
具体见博客
## 程序员趣事 ##
WWDC 中说,使用 Instruments 的 Energy Log 模版,要看到电量消耗,就要导入离线的 log。(几个月以前,还能用)
在手机的设置中,开发者选项中的 Logging, 选中 Energy, 点击开始录制。
之后,使用你的 app 一段时间, 开发者选项中的 Logging 中, 点击完成录制, 导入电量消耗 log 数据,到 Instruments 的 Energy Log 模版.
今天试了几下,好像 gg 了。 难道是因为我没有重启 Mac 吗?
相关博客: juejin.im
过去, Xcode 的 Instruments 中 Core Animation 模版几个调试选项非常强大,正常的绿色, 异常的红色,离屏渲染的黄色。
(光栅化有效,光栅化后缓存的内容成功复用。界面会显示绿色。
光栅化失效的部分,呈红色。光栅化后缓存的内容没有复用,光栅化隐式创建的位图浪费了。直接重新绘制。 )
现在这些利器都在 Xcode 里了,可以直接使用。
相关博客: juejin.im
过去, Xcode 的 Instruments 中 Core Animation 模版几个调试选项非常强大,正常的绿色, 异常的红色,离屏渲染的黄色。
(光栅化有效,光栅化后缓存的内容成功复用。界面会显示绿色。
光栅化失效的部分,呈红色。光栅化后缓存的内容没有复用,光栅化隐式创建的位图浪费了。直接重新绘制。 )
现在这些利器都在 Xcode 里了,可以直接使用。
相关博客: juejin.im
看了下翻转二叉树,
Max Howell 很强的一句:我们 90% 的工程师使用您编写的软件( Homebrew ),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
这道题,使用递归,看语句非常直观。(代码见图片, Swift 4.2 )
交换结点的左子结点和右子结点, 递归下去, 交换每一个存在结点的左子结点和右子结点。
语句非常好理解。
想象一下这个过程,挺能帮助理解递归的。
例如:
root 参数,在函数递归调用栈,中扮演的角色 。 第一轮, root 是外部传参, 之后 root 就是子结点了。
最后一层,叶子结点作为 root 传进去, 下面这两行递归函数,就没做事情,直接 return 。
倒数第二层的结点,每一颗两层的子树的左结点放进去, 直接返回了, 安排在他的右结点上。
面试 Eleme 的一道算法题。
给两个有序数组,找出中间值。
我的方案... , 查了下资料。
关键点, 就是中间值有什么用。
中间值可以把一个有序集合一分为二,左边的值总比右边的小。
现在是两个数组的中间值,
用 i 拆分第一个数组,
left_A | right_A
A[0], A[1], ..., A[i-1] | A[i], A[i+1], ..., A[m-1]
用 j 拆分第二个数组,
left_B | right_B
B[0], B[1], ..., B[j-1] | B[j], B[j+1], ..., B[n-1]
接着做一个合并, 小的都放左边, 大的都放右边。
left_part | right_part
A[0], A[1], ..., A[i-1] | A[i], A[i+1], ..., A[m-1]
B[0], B[1], ..., B[j-1] | B[j], B[j+1], ..., B[n-1]
如果满足这两个条件,
len(left_part)=len(right_part)
max(left_part)≤min(right_part)
现在两个数组的中间值,就出来了
max(left_part)+min(right_part) 的一半
然后就是找出 满足条件的 i
充分利用规则, 找到合适的点, 就可以了
LeetCode 第 4 题, Median of Two Sorted Arrays
leetcode.com
经历了多线程 Error 的一天。本来想 Flutter 入门, 结果看美剧去了,这就是 优先级倒置。刷着微信群,想着有了女朋友,一定发奋图强。不立刻 Qiang , 哪来的 GF. 又遇到了 死锁。 城里人这么多, Race Condition 数据竞争非常明显。感觉自助餐是个例子,这次盘里有,下次访问空
刷国货牛客网的剑指 offer , 看道题目,两个链表的第一个公共结点, 输入两个链表,找出它们的第一个公共结点。
不难
Leetcode 一向图文并茂,是要借鉴的。 找到了, 第 160 题,Intersection of Two Linked Lists .
写一个程序,找到两个单链表的第一个交叉节点。
信息全面清晰直观,Leetcode 建设稍完善。
这道题有如下条件:
如果两条链表没有交叉,就返回空。
函数执行完,链表的结构不变。
整个链表结构中,没有任何的循环。
程序尽量以 O(n) 的时间效率,并只占用 O(1) 的空间。
解法:
使用哈希表,遍历两个链表就可以了,非常直观。
使用双指针掉头比较大法好。
查找指定元素:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
这个也就是 LeetCode 的 240 题, Search a 2D Matrix II
这个集合非常有规律,相当于二叉搜索中,把有序数组拆分成 n 段,可以还原,再用递归+分治。 少写点代码也可以结合这个数据结构的特性,精心设计两个指针, 左上方的坐标,或右下方的
温习了下二叉树,原来访问结点的遍历代码,️简单。
面试的算法题, 中序排序出结果特别简单, 就是从左到右数。
前序, Data,Left, Right
printf("%d\n", node->data);
pre_order_traversal(node->leftChild);
pre_order_traversal(node->rightChild);
中序, Left, Data, Right
in_order_traversal(node->leftChild);
printf("%d\n", node->data);
in_order_traversal(node->rightChild);
后序, Left, Right,Data
post_order_traversal(node->leftChild);
post_order_traversal(node->rightChild);
printf("%d\n", node->data);
代码区别不大,结果差异很大,因为有一个递归的放大。
更多见 github.com/BoxDengJZ/sort_algo_swift/blob/master/L_D_R/L_D_R/Data/TreeNode.c
下一页