Dimple在左耳听风ARTS打卡(十六)

 
 

所谓ARTS:每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)这是第十六期打卡。

写作课已经进行到一半了,还是那句话,适合自己的才是最好的。或许写作课对有些人来说是好的,也可能对有些人来说是不需要付出的,这个还需要看每个人的想法,想走的路子,适合自己的才是最好的哦。

Algorithm LeetCode算法

合并两个有序数组
(https://leetcode-cn.com/problems/merge-sorted-array/)

题目描述:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

说明:

示例 1

输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6],       n = 3输出: [1,2,2,3,5,6]
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

方法一:合并后排序

先来给大家看一个从Java角度来说,最最简单的做法,就是使用Java内置的API来搞定。我就不说啦,请看代码。用System.arraycopy进行合并,在用Arrays.sort进行排序。

public static void merge(int[] nums1, int m, int[] nums2, int n) {    System.arraycopy(nums2, 0, nums1, m, n);    Arrays.sort(nums1);}
    System.arraycopy(nums2, 0, nums1, m, n);
    Arrays.sort(nums1);
}

但是这个时间复杂度稍差,需要O((n+m)log(n+m)),毕竟在这里没有利用两个数组本身已经有序这个特点来搞。

接下来用的是参考了https://juejin.im/post/5bee5089e51d4538670b00d7其他的方法,我参考了掘金上这个【程序员乔戈里】的方法,使用了双指针的做法,还是蛮赞的。

这里我提一句,其实力扣里有一个官方解答,但是我运行起来的时候,一直都是报错的,尤其是方法二和方法三,不知道是我的方法不对,还是程序本身就是问题,我把地址附上,小伙伴们有兴趣的,可以看下,告诉我答案哦。

地址如下:https://leetcode-cn.com/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetcode/

本来思路挺好的,用了双指针从前往后和从后往前,可惜跑不起来。但也是奇怪,放进去审核,又是可以通过的,我有点怀疑自己了,哈哈。

public static void merge1(int[] nums1, int m, int[] nums2, int n) {    int[] result = new int[m+n];    int i = 0,j = 0,p=0;    while (i < m && j < n) {        if (nums1[i] < nums2[j]) {            result[p++] = nums1[i++];        } else {            result[p++] = nums2[j++];        }    }    if (i != m) {        while (i < m) {            result[p++] = nums1[i++];        }    }    if (j != n) {        while (j < n) {            result[p++] = nums2[j++];        }    }    p = 0;    for(i = 0; i< nums1.length;i++) {        nums1[i] = result[p++];    }}
    int[] result = new int[m+n];
    int i = 0,j = 0,p=0;
    while (i < m && j < n) {
        if (nums1[i] < nums2[j]) {
            result[p++] = nums1[i++];
        } else {
            result[p++] = nums2[j++];
        }
    }

    if (i != m) {
        while (i < m) {
            result[p++] = nums1[i++];
        }
    }

    if (j != n) {
        while (j < n) {
            result[p++] = nums2[j++];
        }
    }

    p = 0;
    for(i = 0; i< nums1.length;i++) {
        nums1[i] = result[p++];
    }
}

Review 阅读并点评至少一篇英文文章

Android Studio Project Marble: Layout Editor
(https://medium.com/androiddevelopers/android-studio-project-marble-layout-editor-608b6704957a)

好像连续几周看的都是程序员如何提升自身能力方面的话题,没有像以前一样,分享技术相关的,这次,我又找了篇关于Android Studio 布局编辑器相关的给大家,希望大家能喜欢。

这是 Android Studio 团队发布的一系列博客文章中的第五篇,这些博客文章深入探讨了 Project Marble 的一些细节和幕后故事。(感觉我可以把这五篇都看完,也可以整理成一个系列来分享了)

文中介绍了开发人员在Project Marble 期间进行了以下六大优化布局编辑器:

并对每一个资源进行了详细的介绍。所以,这里我没法一一解答,给大家一个中文翻译的地址,是我在掘金上看到的,还是蛮好的哦。

【译】Android Studio Project Marble:布局编辑器
(https://juejin.im/post/5d24b7ce6fb9a07ef7109a6c#heading-4)

昨天,和一位老哥聊了聊,还是坚定了我学习Java和Android到底的决心,所以后续我会更多的往这方面的资料分享,提前祝大家周末愉快。

Tip 一个技术技巧

这次分享的是网络优化中的第三篇,这里更新完,后续我找找其他资源了要

移动端监控
  1. 如何监控网络

第一种方法:插桩

为了兼容性考虑,首先想到的还是插桩。360开源的性能监控工具ArgusAPM就是利用Aspect切换插桩,实现监控系统和OkHttp网络库的请求。

第二种方法:Native Hook

网络相关的我们一般会Hook下面几个方法:

第三种方法:统一网络库

  1. 如何监控流量
    应用流量监控的方法非常简单,一般通过TrafficStats类。

iPhone 的无线网络助理、小米和一加的自适应 WLAN它们在检测 WiFi 不稳定时会自动切换到移动网络。那请你思考一下,它们是如何实现侦测,如何区分是应用后台服务器出问题还是 WiFi 本身有问题呢

对于手机厂商来说根本不需要访问一个公网IP的方式,它在底层可以拿到的信息有很多。

大网络平台监控
  1. 客户端监控

  2. 接入层监控

接入层的数据监控还是非常有必要的,主要的原因是:

接入层应该关心哪些数据呢?一般来说,会比较关心服务的入口和出口流量、服务端的处理时延、错误率等。

  1. 监控报警

总结

监控、监控又是监控,很多性能优化工作其实都是“三分靠优化,七分靠监控”。

我们在工作的时候,希望你可以看得更远,从更高的角度去思考问题。多想想如果我能做好这件事情,怎么保证其他人不会犯错,或者让所有人都可以做得更好

Share 一篇有观点和思考的技术文章

后续还是继续更新设计模式相关文章哦。

公众号地址:
设计模式之单例模式(一)

爱生活,爱学习,爱感悟,爱挨踢
640?wx_fmt=jpeg


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小跃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值