• leetcode刷题总结701-750


    701. 二叉搜索树中的插入操作

      描述:

        

       思路:递归。

    703. 数据流中的第K大元素

      描述:

        

      思路:维护一个K大小的小顶堆。堆顶就是那个第k大的。

     705. 设计哈希集合

      描述:

        

       思路:建立 bucket数组。,每个bucker是一个linkedlist。建立hash函数到bucket下表的映射。

    706. 设计哈希映射

      描述:

        

       思路:创建bucket列表(数组)。每个bucket是一个linkedlist。list中存取pair.首先对pair的keyhash,然后把这个pair添加到liekedlist.

    707. 设计链表

      描述:

        

       思路:head指针。增删需要定位pre。

    712. 两个字符串的最小ASCII删除和  

      描述:

        

       思路:

        题意是寻找一个共同子序列,将字符串s1和s2删除为该子序列时所删除的ASCII综合最小。
        等价于求一个字符串s1和s2的ASCII码总和最大的共同子序列。
        因为s1和s2的总和固定,当共同子序列的总和最大时,删除成为该子序列的代价必然最小。

        因此问题转化为最长共同子序列,dp[i][j]为s1[:i]和s2[:j]的ASCII码最大的子序列,则:
        dp[i][j] = dp[i-1][j-1] + ASCII(s1[i]), s1[i] == s2[j]
        dp[i][j] = max(dp[i][j-1], dp[i-1][j]), s1[i] != s2[j]

    713. 乘积小于K的子数组

      描述:

        

       思路:滑动窗口。

    714. 买卖股票的最佳时机含手续费

      描述;
        

       思路:动态规划。

        

     717. 1比特与2比特字符

      描述:

        

       思路:从后往前,

        1.如果倒数第二位为0,则必然正确;
        2.如果倒数第二位为1,则连续1的个数必须为偶数;

    718. 最长重复子数组

      描述:

        

       思路:

        if(s1.charAt(i) == s2.charAr(j))
        dp[i][j] = dp[i-1][j-1] + 1;
        else
        dp[i][j] = 0;

    719. 找出第 k 小的距离对

      描述:

        

       思路:先对数组排序。然后对最大值最小值进行二分。统计小于二分值的数量是否大于k来决定左指针还是右指针移动。

    720. 词典中最长的单词

      描述:

        

       思路:创建一个字典树,往下遍历。

    722. 删除注释

      描述:

        

         

       思路:通过一个标志记录是否是处于注释范围内。。

    724. 寻找数组的中心索引

      描述:

        

       思路:前缀和。

    725. 分隔链表

      描述:

        

       思路:首先对每个均分 len/k。 余数从第一个开始多加1.

    726. 原子的数量

      描述:
        

       思路:栈。

    735. 行星碰撞

      描述:

        

       思路:栈。

    738. 单调递增的数字

      描述:

        

       思路:先从尾到头遍历一遍,如果出现逆序,大的值减1,并记录最后一个逆序的位置i,然后把从i开始到末尾的数全部变9

    739. 每日温度

      描述:
        

       思路:栈。

    740. 删除与获得点数

      描述:

        

       思路:类似于打家劫舍。

          

     743. 网络延迟时间

      描述:

        

       思路:迪杰斯特拉。

        

    class Solution {
        Map<Integer, Integer> dist;
        public int networkDelayTime(int[][] times, int N, int K) {
            Map<Integer, List<int[]>> graph = new HashMap();
            for (int[] edge: times) {
                if (!graph.containsKey(edge[0]))
                    graph.put(edge[0], new ArrayList<int[]>());
                graph.get(edge[0]).add(new int[]{edge[1], edge[2]});
            }
            dist = new HashMap();
            for (int node = 1; node <= N; ++node)
                dist.put(node, Integer.MAX_VALUE);
    
            dist.put(K, 0);
            boolean[] seen = new boolean[N+1];
    
            while (true) {
                int candNode = -1;
                int candDist = Integer.MAX_VALUE;
                for (int i = 1; i <= N; ++i) {
                    if (!seen[i] && dist.get(i) < candDist) {
                        candDist = dist.get(i);
                        candNode = i;
                    }
                }
    
                if (candNode < 0) break;
                seen[candNode] = true;
                if (graph.containsKey(candNode))
                    for (int[] info: graph.get(candNode))
                        dist.put(info[0],
                                 Math.min(dist.get(info[0]), dist.get(candNode) + info[1]));
            }
    
            int ans = 0;
            for (int cand: dist.values()) {
                if (cand == Integer.MAX_VALUE) return -1;
                ans = Math.max(ans, cand);
            }
            return ans;
        }
    }
    View Code

     

  • 相关阅读:
    C++指针和引用及区别
    C/C++中extern关键字总结
    php进阶面试题总结
    算法疑难(js实现)---11、字典树
    Trie|如何用字典树实现搜索引擎的关键词提示功能
    ExtJS表格——行号、复选框、选择模型
    Ext.js 中 25种类型的Ext.panel.Tool
    Ext NumberField使用
    [ext]form.submit()相关说明
    ExtJS 表单 submit时错误处理
  • 原文地址:https://www.cnblogs.com/dhName/p/13332322.html
Copyright © 2020-2023  润新知