首页 > 其他分享 >LeetCode_单周赛_328

LeetCode_单周赛_328

时间:2023-01-15 18:34:02浏览次数:63  
标签:map 10 int 单周赛 vis 数组 ans 328 LeetCode

6291. 数组元素和与数字和的绝对差

在这里插入图片描述

代码

模拟即可

class Solution {
    public int differenceOfSum(int[] nums) {
        int ans = 0;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            int t = nums[i];
            ans += t;
            while (t > 0) {
                sum += t % 10;
                t /= 10;
            }
        }
        return Math.abs(ans - sum);
    }
}

6292. 子矩阵元素加 1

在这里插入图片描述

代码

差分模板
但是在处理的时候,因为差分数组下标从 1 开始比较方便,所以我们让 q 中的值都 +1
最后返回结果时,原数组 = 差分数组的前缀和
为了符合下标从 0 开始的要求,我们定义数组 a,作为结果返回,存储时下标 -1 存储

class Solution {
    private int[][] b;
    public int[][] rangeAddQueries(int n, int[][] q) {
        b = new int[n + 10][n + 10];
        for (var a : q) {
            insert(a[0] + 1, a[1] + 1, a[2] + 1, a[3] + 1);
        }

        int[][] a = new int[n][n];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                b[i][j] += b[i][j - 1] + b[i - 1][j] - b[i - 1][j - 1];
                a[i - 1][j - 1] = b[i][j];
            }
        }
        return a;
    }

    private void insert(int x1, int y1, int x2, int y2) {
        b[x1][y1] += 1;
        b[x2 + 1][y1] -= 1;
        b[x1][y2 + 1] -= 1;
        b[x2 + 1][y2 + 1] += 1;
    }
}

6293. 统计好子数组的数目

在这里插入图片描述

代码

双指针
map存储每个数出现的次数
从左往右进行双指针,先左指针不动,一直右移右指针,直到满足条件 / 到达边界 为止
如果满足条件

  1. 则以 l 为左端点,r 右边的端点都满足。左端点为 l 的情况就找完了,不用再遍历左端点为 l 的情况了。
  2. 此时不断向右移动左指针,看是否满足(这一步用while,保证此时的右边界 r 不变)

不满足条件就继续移动

class Solution {
    public long countGood(int[] a, int k) {
        int l = 0, r = 1, n = a.length;
        long t = 0;
        long ans = 0;
        boolean[] vis = new boolean[n + 10];
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(a[l], 1);
        vis[0] = true;
        while (l < r && r < n) {
            if (!vis[r] && map.getOrDefault(a[r], 0) >= 1) {
                t += map.get(a[r]);
            }
            if (!vis[r]) map.put(a[r], map.getOrDefault(a[r], 0) + 1);
            vis[r] = true;
            
            
            while (t >= k) {
                ans += n - r;
                
                t -= map.get(a[l]) - 1;
                map.put(a[l], map.get(a[l]) - 1);
                l++;
            }
            r++;
        }
        
        return ans;
    }
}

标签:map,10,int,单周赛,vis,数组,ans,328,LeetCode
From: https://www.cnblogs.com/Changersh/p/17053900.html

相关文章

  • LeetCode 300_最长递增子序列
    LeetCode300:最长递增子序列题目给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素......
  • 【BFS】LeetCode 542. 01 矩阵
    题目链接542.01矩阵思路题目让求1到0的距离,其实可以转换成求0到1的距离,将所有的0作为源结点放入队列进行BFS。BFS本质上就是从源点开始的搜索算法,本题只不过是所有的......
  • 【BFS】LeetCode 1091. 二进制矩阵中的最短路径
    题目链接1091.二进制矩阵中的最短路径思路BFS找最短路模板题代码classSolution{publicintshortestPathBinaryMatrix(int[][]grid){if(grid[0][......
  • LeetCode刷题:runtime error: reference binding to null pointer of type 'int' (stl_
    题目:https://leetcode.cn/problems/merge-intervals/错误代码://思路初探:做了很多道类似区间操作的题目了。本题就是尽可能少的创建新区间//1.首先对区间排序(左边界升......
  • LeetCode寻找两个正序数组的中位数(vector/二分查找 划分数组)
    原题解题目给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。约束......
  • Leetcode——双向链表和哈希表实现LRU缓存和LFU缓存
    一、Leetcode146.LRU缓存1.使用STLlist和unordered_map实现usingKV=pair<int,int>;classLRUCache{private:intcacheCapacity;list<KV>cacheList;......
  • LeetCode.19 删除链表的倒数第n个元素
    1.题目给你一个链表,删除链表的倒数第 ​​n​​ 个结点,并且返回链表的头结点。 2.代码/***Definitionforsingly-linkedlist.*publicclassListNode{*int......
  • LeetCode 142_环形链表 II
    LeetCode142:环形链表II题目给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指......
  • leetcode 笔记
    1.移位运算符>>&>>=和|=属于位运算符,作用是对二进制数进行移位操作<<左移:末尾补0,原数乘2比如十进制数10,在末位补0等于100,相当于原数乘10,所以x<<1就是......
  • LeetCode.24 两两交换链表中的结点
    1.题目给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 2.代码/***Definitionforsin......