力扣第197场周赛

 1 class Solution {
 2     public int numIdenticalPairs(int[] nums) {
 3       HashMap<Integer,Integer> index = new HashMap<Integer,Integer>();
 4       int total = 0;
 5       int number;
 6       for (int i=0; i<nums.length; i++) {
 7          index.put(nums[i], index.getOrDefault(nums[i], 0) + 1);
 8       }
 9       for (int key:index.keySet()){    
10           total += index.get(key)*(index.get(key) - 1) / 2;
11        }
12       return total;        
13     }
14 }

 

单题总结, 优:使用了哈希表对数据存储进行了优化

       差:哈希表的getOrDefault操作仍不熟悉

 

class Solution {
    public int numSub(String s) {
        double res = 0;
        double modNum = 1000000007;
        int len = s.length();
        double[] dp = new double[len];
        if(len == 0)
            return 0;
        dp[0] = s.charAt(0) == '1' ? 1 : 0;
        res = dp[0];
        for(int i = 1; i < len; i++) {
            if(s.charAt(i) == '1')
                dp[i] = dp[i-1] + 1;
            else dp[i] = 0;
            res += dp[i];
        }
        return (int)(res%modNum);
    }
}
View Code

单体总结, 优:使用了动态规划

           差:未使用Double数据类型,数据取余出错。

也可使用split分割字符串后,用求和公式求解

 1 class Solution {
 2     public int numSub(String s) {
 3         String[] strs = s.split("0");
 4         double max = 0;
 5         double mode = (int) (Math.pow(10,9) + 7);
 6         for(String str: strs){
 7             double a = (double) str.length();
 8             double b = (double) str.length() + 1;
 9             max += a*b/2 % mode;
10         }
11         return (int) max;
12     }
13 }
View Code

 

 1     public static double maxProbability(int n, int[][] edges, double[] succProb, int start, int end) {
 2         double max = 0;
 3         double[] dp = new double[n];
 4         dp[start] = 1;
 5         HashMap<Integer,ArrayList<Pair<Integer, Double>>> xianglian = new HashMap<Integer,ArrayList<Pair<Integer, Double>>>();
 6         for (int i = 0; i < edges.length; i++) {
 7             if (xianglian.containsKey(edges[i][0])) {
 8                 xianglian.get(edges[i][0]).add(new Pair(edges[i][1],succProb[i]));
 9             }
10             else {
11                 xianglian.put(edges[i][0], new ArrayList());
12                 xianglian.get(edges[i][0]).add(new Pair(edges[i][1],succProb[i]));
13             }
14             if(xianglian.containsKey(edges[i][1])) {
15                 xianglian.get(edges[i][1]).add(new Pair(edges[i][0],succProb[i]));
16             }
17             else {
18                 xianglian.put(edges[i][1], new ArrayList());
19                 xianglian.get(edges[i][1]).add(new Pair(edges[i][0],succProb[i]));
20             }
21         }
22         if(!xianglian.containsKey(start) || !xianglian.containsKey(end))
23             return 0;
24         else {
25             Queue<Integer> q = new ArrayDeque<Integer>();
26             q.add(start);
27             while (!q.isEmpty()) {
28                 int cur = q.poll();
29                 for (Pair node : xianglian.get(cur)) {
30                     if (dp[cur] * (double)node.getValue() > dp[(int)node.getKey()] ) {
31                         q.add((int)node.getKey());
32                         dp[(int)node.getKey()] = dp[cur] * (double)node.getValue();
33                     }
34                 }
35             }
36             return dp[end];
37         }
38     }
View Code

单题总结, 优:使用哈希表,存取邻接矩阵,加快了搜索的效率。                 

           差:该题中自己开始最初使用二维数组存储了两点间权值,导致了超出内存限制。且对于使用Dijkstra算法不够熟练,对于图的相关操作欠缺。

收获:了解到了Pair数据存储方式,能够实现键值对的映射,该题中运用该方法,将邻接矩阵和权值存储在一起,使用getKey获得邻接点,getValue获得权值,减少了内存消耗;了解到了Dijkstra算法。

 

posted @ 2020-07-12 22:00  小小码农-安  阅读(181)  评论(0编辑  收藏  举报