2021.1.24-2021.1.28 题解

本贴最后更新于 1184 天前,其中的信息可能已经东海扬尘

2021.1.24-2021.1.28 题解

  • 674.最长递增子序列 2021.1.24
    https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/
    方法具体可以类比寻找最大值,只不过最大值变成了每个序列的递增长度,设置一个 curMax 和一个 max,如果序列一直在递增,就 curMax++,直到递减重置 curMax,然后根据 curMax 和 max 的大小对 max 进行更新。

    package _2021._01._0124._1;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/24 10:02 上午
     * @description 最长递增子序列,
     * 方法具体可以类比寻找最大值,只不过最大值变成了每个序列的递增长度,设置一个curMax
     * 和一个max,如果序列一直在递增,就curMax++,直到递减重置curMax,然后根据curMax
     * 和max的大小对max进行更新。
     */
    public class Solution {
        public static int findLengthOfLCIS(int[] nums) {
            if (nums.length == 0) {
                return 0;
            }
            int max = 1;
            int curMax = 1;
            for (int i = 1; i < nums.length; i++) {
                if (nums[i] > nums[i - 1]) {
                    curMax++;
                } else {
                    curMax = 1;
                }
                max = Math.max(curMax, max);
            }
            return max;
        }
    
        public static void main(String[] args) {
            int[] nums = {2,2,2};
            System.out.println(findLengthOfLCIS(nums));
        }
    }
    
  • 2.两数相加 2021.1.24
    https://leetcode-cn.com/problems/add-two-numbers/
    两数相加,数字是倒序存储的,所以可以直接遍历两个链表,让两个节点的值相加,如果存在大于等于 10 的情况就进位,下两个节点计算加上进位,如果最后两个节点还存在进位,那就新建立一个节点存储该进位。

    package _2021._01._0124._2;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/24 11:09 上午
     * @description 2.两数相加,数字是倒序存储的,所以可以直接遍历两个链表,让两个节点的值相加,
     * 如果存在大于等于10的情况就进位,下两个节点计算加上进位,如果最后两个节点还存在进位,那就新
     * 建立一个节点存储该进位。
     */
    public class Solution {
        public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode head = new ListNode(-1);
            ListNode h = head;
            boolean jinwei = false;
            while (l1 != null || l2 != null) {
                int sum = 0;
                if (l1 != null) {
                    sum += l1.val;
                    l1 = l1.next;
                }
                if (l2 != null) {
                    sum += l2.val;
                    l2 = l2.next;
                }
                if (jinwei) {
                    sum++;
                }
                h.next = new ListNode(sum % 10);
                h = h.next;
                jinwei = (sum >= 10);
            }
            if (jinwei) {
                h.next = new ListNode(1);
            }
            return head.next;
        }
    
        public static void main(String[] args) {
        }
    }
    
    class ListNode {
        int val;
        ListNode next;
    
        ListNode() {
        }
    
        ListNode(int val) {
            this.val = val;
        }
    
        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }
    
  • 959.由斜杠划分区域 2021.1.25
    https://leetcode-cn.com/problems/regions-cut-by-slashes/
    将 1x1 的格子扩大成为 3x3 的迷宫,扩大成为 6x6,然后把两种斜线写入迷宫计 1,然后计算最终有多少个区域即可

    package _2021._01._0125;
    
    /**
     * @author Ariel
     * @date 2021/1/25 10:37
     * @description 959. 由斜杠划分区域。
     * 将1*1的格子扩大成为3*3的迷宫,2*2扩大成为6*6,然后把两种斜线写入迷宫计1,然后计算最终有多少个
     * 区域即可
     */
    public class Solution {
        private static int[][] next = {{0,1}, {1,0}, {0,-1}, {-1,0}};
        public static int regionsBySlashes(String[] grid) {
            int count = 100;//记录有多少个区域,深搜一次说明就有一个
            int [][] g = new int[grid.length * 3][grid[0].length() * 3];
            //初始化
            for (int i = 0; i < g.length; i++) {
                for (int j = 0; j < g[0].length; j++){
                    g[i][j] = 0;
                }
            }
            //填迷宫
            for (int i = 0; i < grid.length; i++) {
                char[] chars = grid[i].toCharArray();
                for (int j = 0; j < chars.length; j++) {
                    if (chars[j] == '/') {
                        g[i * 3 + 2][j * 3] = 1;
                        g[i * 3 + 1][j * 3 + 1] = 1;
                        g[i * 3][j * 3 + 2] = 1;
                    }
                    if(chars[j] == '\\'){
                        g[i * 3][j * 3] = 1;
                        g[i * 3 + 1][j * 3 + 1] = 1;
                        g[i * 3 +2][j * 3 + 2] = 1;
                    }
                }
            }
            //开始深搜
            for (int i = 0; i < g.length; i++) {
                for (int j = 0; j < g[0].length; j++) {
                    if(g[i][j] == 0){
                        g[i][j]= count;
                        dfs(g, i, j, count);
                        count++;
                    }
                }
            }
            return count - 100;
        }
        static void dfs(int[][]g, int i, int j, int count){
            for (int m = 0; m < 4; m++) {
                int nextX = next[m][0] + i;
                int nextY = next[m][1] + j;
                if (nextX >= 0 && nextX < g.length && nextY >= 0 && nextY < g[0].length && g[nextX][nextY] == 0) {
                    g[nextX][nextY] = count;
                    dfs(g, nextX, nextY, count);
                }
            }
        }
    
        public static void main(String[] args) {
            String[] grid = new String[2];
            grid[0] = "//";
            grid[1] = "/ ";
            System.out.println(regionsBySlashes(grid));
        }
    }
    
  • 1128.等价多米诺骨牌对的数量 2021.1.26
    https://leetcode-cn.com/problems/number-of-equivalent-domino-pairs/
    对于 12,21 这种我们统一看成 12,并将 12 看成 key,value 看成有多少个组是 12,然后对 value 进行组合计算,求和得到最终的结果。

    package _2021._01._0126;
    
    import java.util.HashMap;
    import java.util.Set;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/26 9:52 上午
     * @description 1128.等价多米诺骨牌对的数量
     * 给出n个二元组,两个组,相同或者相反代表是相同的一组,查一共有多少个相同组。
     * 例如 (1,2)(2,1)(3,4)(4,5)只有前两个是相同的一组,输出为1
     * 解法:对于12,21这种我们统一看成12,并将12看成key,value看成有多少个组是12,然后对value进行
     * 组合计算,求和得到最终的结果。
     */
    public class Solution {
        public static int numEquivDominoPairs(int[][] dominoes) {
            HashMap<Integer, Integer> hashMap = new HashMap<>();
            for (int i = 0; i < dominoes.length; i++) {
                int[] row = dominoes[i];
                int key = 0;
                if (row[0] > row[1]) {
                    key = row[0] * 10 + row[1];
                } else {
                    key = row[1] * 10 + row[0];
                }
    
                if (!hashMap.containsKey(key)) {
                    hashMap.put(key, 1);
                } else {
                    hashMap.put(key, hashMap.get(key) + 1);
                }
            }
            Set<Integer> integers = hashMap.keySet();
            int ans = 0;
            for (Integer integer : integers) {
                int val = hashMap.get(integer);
                if (val >= 2) {
                    ans += (val * (val - 1) / 2);
                }
            }
            return ans;
        }
    
        public static void main(String[] args) {
            int [][]res = {{1,2},{2,1},{2,1},{5,6}};
            System.out.println(numEquivDominoPairs(res));
        }
    }
    
  • 461.汉明距离 2021.1.26
    https://leetcode-cn.com/problems/hamming-distance/
    汉明距离是求两个数字中,不同位的数字的个数。因此可以先进行异或,然后结果里边的所有的 1 就是最终结果。因此提供两种解法:第一种就是一位一位的移动,计算 1 的个数。第二种是叫做布赖恩·克尼根算法,他是可以直接计算 1,可以跳过 0。如图,让 x & (x-1)就可以去除掉 x 中的最后一个 1,以此类推,该操作的次数就是结果里边 1 的个数。
    img

    package _2021._01._0126._2;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/26 11:16 上午
     * @description 461.汉明距离
     */
    public class Solution {
        public static int hammingDistance(int x, int y) {
            int result = x ^ y;
            int dis = 0;
            //相与计算
    //        while (result != 0) {
    //            //每做一次该操作,都消除了一个1
    //            result = (result & (result - 1));
    //            dis++;
    //        }
            //移位计算
            while (result != 0) {
                if (result % 2 == 1) {
                    dis++;
                }
                result = result >> 1;
            }
            return dis;
        }
    
        public static void main(String[] args) {
            System.out.println(hammingDistance(1, 4));
        }
    }
    
  • 1579.保证图可完全遍历 2021.1.27
    https://leetcode-cn.com/problems/remove-max-number-of-edges-to-keep-graph-fully-traversable/
    这个题的主要思路有点类似于克鲁斯卡尔求最小生成树,但是不同的是这个图没有权重,因此可以按照边的顺序进行依次加边。而且判断连通也不是整个图连通,而是判断两个点是否连通,如果这两个点已经连通了,那么如果再对这两个点加边就是多余的,此时最终的答案 +1。然后具体判断两个点是否连通可以用并查集。

    package _2021._01._0127;
    
    import java.util.Arrays;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/27 11:26 上午
     * @description 1579.保证图可完全遍历
     * 因为没有权重,所以按照顺序遍历,依次加边,然后判断联通,如果两点已经联通,那么下次连接
     * 这两点的边就是多余的,不再加边,记录可删除数字+1。先加公共边,然后加alice,加bob。
     * 二者分别有一个并查集来判断任意两点是否联通。最后各自的并查集数目为1代表合并完成,可连通。
     * 并查集可以看成是几个联通点的集合,他们几个之间类似树的关系,有一个祖先节点。
     */
    public class Solution {
        public static int maxNumEdgesToRemove(int n, int[][] edges) {
            init(edges);
            Union alice = new Union(n);
            Union bob = new Union(n);
            int ans = 0;
            for (int[] edge : edges) {
                if (edge[0] == 3) {
                    if (!alice.isConnected(edge[1], edge[2])) {
                        alice.merge(edge[1], edge[2]);
                        bob.merge(edge[1], edge[2]);
                    } else {
                        ans++;
                    }
                }
            }
            for (int[] edge : edges) {
                if (edge[0] == 1) {
                    if (!alice.isConnected(edge[1], edge[2])) {
                        alice.merge(edge[1], edge[2]);
                    } else {
                        ans++;
                    }
                }
                if (edge[0] == 2) {
                    if (!bob.isConnected(edge[1], edge[2])) {
                        bob.merge(edge[1], edge[2]);
                    } else {
                        ans++;
                    }
                }
            }
            return (alice.count == 1 && bob.count == 1) ? ans : -1;
        }
    
        public static void init(int[][] edges) {
            for (int[] edge : edges) {
                edge[1]--;
                edge[2]--;
            }
        }
    
        public static void main(String[] args) {
    //        int[][] edges = {{3, 1, 2}, {3, 2, 3}, {1, 1, 3}, {1, 2, 4}, {1, 1, 2}, {2, 3, 4}};
    //        System.out.println(maxNumEdgesToRemove(4, edges));
    //        int n = 2;
    //        int[][] edges = {{1, 1, 2}, {2, 1, 2}, {3, 1, 2}};
            int n = 13;
            int[][] edges = {{1,1,2},{2,1,3},{3,2,4},{3,2,5},{1,2,6},{3,6,7},{3,7,8},{3,6,9},{3,4,10},{2,3,11},{1,5,12},{3,3,13},{2,1,10},{2,6,11},{3,5,13},{1,9,12},{1,6,8},{3,6,13},{2,1,4},{1,1,13},{2,9,10},{2,1,6},{2,10,13},{2,2,9},{3,4,12},{2,4,7},{1,1,10},{1,3,7},{1,7,11},{3,3,12},{2,4,8},{3,8,9},{1,9,13},{2,4,10},{1,6,9},{3,10,13},{1,7,10},{1,1,11},{2,4,9},{3,5,11},{3,2,6},{2,1,5},{2,5,11},{2,1,7},{2,3,8},{2,8,9},{3,4,13},{3,3,8},{3,3,11},{2,9,11},{3,1,8},{2,1,8},{3,8,13},{2,10,11},{3,1,5},{1,10,11},{1,7,12},{2,3,5},{3,1,13},{2,4,11},{2,3,9},{2,6,9},{2,1,13},{3,1,12},{2,7,8},{2,5,6},{3,1,9},{1,5,10},{3,2,13},{2,3,6},{2,2,10},{3,4,11},{1,4,13},{3,5,10},{1,4,10},{1,1,8},{3,3,4},{2,4,6},{2,7,11},{2,7,10},{2,3,12},{3,7,11},{3,9,10},{2,11,13},{1,1,12},{2,10,12},{1,7,13},{1,4,11},{2,4,5},{1,3,10},{2,12,13},{3,3,10},{1,6,12},{3,6,10},{1,3,4},{2,7,9},{1,3,11},{2,2,8},{1,2,8},{1,11,13},{1,2,13},{2,2,6},{1,4,6},{1,6,11},{3,1,2},{1,1,3},{2,11,12},{3,2,11},{1,9,10},{2,6,12},{3,1,7},{1,4,9},{1,10,12},{2,6,13},{2,2,12},{2,1,11},{2,5,9},{1,3,8},{1,7,8},{1,2,12},{1,5,11},{2,7,12},{3,1,11},{3,9,12},{3,2,9},{3,10,11}};
            System.out.println(maxNumEdgesToRemove(n, edges));
        }
    }
    
    class Union {
        int[] parent;
        int[] size;
        int count;
        int n;
    
        public Union(int n) {
            this.n = n;
            this.count = n;
            parent = new int[n];
            size = new int[n];
            Arrays.fill(size, 1);
            for (int i = 0; i < parent.length; i++) {
                parent[i] = i;
            }
        }
    
        public int findRoot(int x) {
            //判断是否找到了最后的祖先。即判断x本身是否为祖先
            if (x == parent[x]) {
                return x;
            }
            //如果x不是祖先,那就接着判断x的父亲是不是祖先,并且更新x的父亲为找到的祖先结果
            parent[x] = findRoot(parent[x]);
            return parent[x];
        }
    
        public boolean merge(int x, int y) {
            //注意这里并查集的合并不能简单的将两个点合并,而是将两个点所在的集合合并
            //因此操作的是root(x)和root(y)
            if (findRoot(x) == findRoot(y)) {
                return false;
            }
            parent[findRoot(x)] = findRoot(y);
            parent[x] = y;
            this.count--;
            return true;
        }
    
        public boolean isConnected(int x, int y) {
            return findRoot(x) == findRoot(y);
        }
    }
    
  • 617.合并二叉树 2021.1.27
    https://leetcode-cn.com/problems/merge-two-binary-trees/
    这个题就正常做,遍历两棵树,计算相应的值作为新树的节点,然后新树的左子树为递归遍历两棵树的左子树。右子树同理

    package _2021._01._0127._2;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/27 10:56 下午
     * @description 617.合并二叉树
     */
    public class Solution {
        public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
            if (t1 == null) {
                return t2;
            }
            if (t2 == null) {
                return t1;
            }
            TreeNode root = new TreeNode(t1.val + t2.val);
            root.left = mergeTrees(t1.left, t2.left);
            root.right = mergeTrees(t1.right, t2.right);
            return root;
        }
    }
    
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
    
        TreeNode() {
        }
    
        TreeNode(int val) {
            this.val = val;
        }
    
        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    
  • 724.寻找数组的中心索引 2021.1.28
    https://leetcode-cn.com/problems/find-pivot-index/
    这题的思路也很明确,就是遍历每一个点,都尝试当做中心索引,然后是否左右相等。但是该题如果对每个中心节点的左右都计算一次太慢。我们只需要判断最后的条件,即 sum 左 + sum 右 + num[i] == total。然后 sum 左和 sum 右是相等的,因此直接 2 * sum 左 + num[i] == total 即可,然后 sum 左可以在遍历 num[i]的时候就计算出来。

    package _2021._01._0128;
    
    import java.util.Arrays;
    
    /**
     * @author <a href="http://blog.chenforcode.cn">PKUCoder</a>
     * @date 2021/1/28 9:22 上午
     * @description 724.寻找数组的中心索引
     */
    public class Solution {
        public static int pivotIndex(int[] nums) {
            int total = Arrays.stream(nums).sum();
            int sum = 0;
            for (int i = 0; i < nums.length; i++) {
                if (sum * 2 + nums[i] == total) {
                    return i;
                }
                sum += nums[i];
            }
    
            return -1;
        }
    
        public static void main(String[] args) {
    //        int[] nums = {-1,-1,-1,-1,-1,-1};
            int []nums = {1, 7, 3, 6, 5, 6};
            System.out.println(pivotIndex(nums));
        }
    }
    
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    492 引用 • 1383 回帖 • 375 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 7 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    370 引用 • 1215 回帖 • 582 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 295 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 9 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 549 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 685 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 19 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 54 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 526 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 443 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 2 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18708 引用 • 69849 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 741 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖 • 1 关注