美文网首页
每周 ARTS 第 11 期

每周 ARTS 第 11 期

作者: 落英坠露 | 来源:发表于2019-06-20 08:30 被阅读0次

    1. Algorithm

    263. 丑数(简单)

    描述:

    编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。

    示例:
    示例:
    输入: 6
    输出: true
    解释: 6 = 2 × 3
    
    思路:
    • 循环实现:循环去除 2、3、5,直到不能整除,如果余数是 1,那么就是丑数。
    • 递归实现:和循环一样,也是不停地除2、3、5。
    class Solution {
        public boolean isUgly(int num) {
            if (num <= 0) {
                return false;
            } else if (num == 1) {
                return true;
            }
            while (num % 2 == 0) {
                num /= 2;
            }
            while (num % 3 == 0) {
                num /= 3;
            }
            while (num % 5 == 0) {
                num /= 5;
            }
            return num == 1;
        }
      
       private static boolean isUgly2(int num) {
            if (num <= 0) {
                return false;
            } else if (num == 1) {
                return true;
            }
            if (num % 2 == 0) {
                return isUgly2(num / 2);
            }
            if (num % 3 == 0) {
                return isUgly2(num / 3);
            }
            if (num % 5 == 0) {
                return isUgly2(num / 5);
            }
            return false;
        }
    }
    
    分析:

    循环和递归实现一样:

    • 时间复杂度:O(logn)
    • 空间复杂度:O(1)

    349. 两个数组的交集(简单)

    描述:

    给定两个数组,编写一个函数来计算它们的交集。

    示例:
    输入: nums1 = [1,2,2,1], nums2 = [2,2]
    输出: [2]
    
    说明:
    • 输出结果中的每个元素一定是唯一的。
    • 我们可以不考虑输出结果的顺序。
    思路:

    使用一个 Set 去除数组一重复元素,另一个 Set 保存两个数组的交集

    解法:
    class Solution {
        public int[] intersection(int[] nums1, int[] nums2) {
            if (nums1 == null || nums2 == null) {
                return new int[]{};
            }
    
            Set<Integer> set1 = new HashSet<>(nums1.length);
            for (int i : nums1) {
                set1.add(i);
            }
            Set<Integer> set2 = new HashSet<>(nums1.length);
            for (int i : nums2) {
                if (set1.contains(i)) {
                    set2.add(i);
                }
            }
            int size = set2.size();
            int[] ret = new int[size];
            Iterator<Integer> iterator = set2.iterator();
            for (int i = 0; i < size; i++) {
                ret[i] = iterator.next();
            }
            return ret;
        }
    }
    
    分析:
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)

    2. Review

    What is an API? In English, please. 什么是 API?

    开发者都知道 API 是应用程序接口,作者对它有更广泛的认识。API 是服务方的一部分,它接收请求并发出响应。API 是向客户提供服务的一种方式,客户端访问 API 获取消息,比如 GitHub 的 API。在面向对象编程中,对象的 public 方法也可以看作是一种 API,用来与其他对象进行交互。

    3. Tip

    Android I/O 那些事儿 总结了 Android 系统的 I/O 知识,对它有了更深层次的了解。

    4. Share

    经典是经过时间筛选的,在这个浮躁的社会,多读经典是最省时间的选择。

    相关文章

      网友评论

          本文标题:每周 ARTS 第 11 期

          本文链接:https://www.haomeiwen.com/subject/xpbrqctx.html