力扣8.28

219.存在重复元素Ⅱ

题目

给你一个整数数组 nums 和一个整数 k,判断数组中是否存在两个 不同的索引 ij ,满足 nums[i] == nums[j]abs(i - j) <= k 。如果存在,返回true ;否则,返回 false

数据范围
  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • 0 <= k <= 105
分析

双指针+map

代码
c 复制代码
class Solution {
public:
    map<int, int> cnt;
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        int l = 0, r = 0;
        int t = min(k, (int)nums.size());
        for(int i = 0; i < t; i ++ ) {
            cnt[nums[i]] ++ ;
            if(cnt[nums[i]] >= 2) return true;
        }
        r = t;
        while(l < r && r < nums.size()) {
            if(cnt[nums[r]] >= 1) {
                return true;
            }else {
                cnt[nums[r ++ ]] ++ ;
                cnt[nums[l ++ ]] -- ;
            }
        }
        return false;
    }
};

73.矩阵置零

题目

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

数据范围
  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -2^31 <= matrix[i][j] <= 2^31 - 1
分析

对于a[i][j]==0,将其所在行和列置0等价于先将a[i][0]a[0][j]置为0,再将a[i][0]所在行和a[0][j]所在列置为0,所以第一轮扫描就可以将每个0元素行和列的开头置为0作为标记,然后第二轮扫描再将对应行和对应列的元素设置为0,需要注意的是,若第一行和第一列本来就有零元素,也需要做个标记,并在最后的时候将第一行和第一列置为0,注意一下细节,例如第一轮扫描时需要避开第一行和第一列,否则会影响到第二轮置零操作

代码
c 复制代码
class Solution {
public:
   void print(int n, int m, vector<vector<int>>& matrix) {
    for(int i = 0; i < n; i ++ ) {
        for(int j = 0; j < m; j ++ ) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    }
    void setZeroes(vector<vector<int>>& matrix) {
        bool flagx = false, flagy = false;
        int n = matrix.size();
        int m = matrix[0].size();
        for(int i = 0; i < n; i ++ ) {
            if(matrix[i][0] == 0) flagx = true;
        }
        for(int i = 0; i < m; i ++ ) {
            if(matrix[0][i] == 0) flagy = true;
        }
        for(int i = 0; i < n; i ++ ) {
            for(int j = 0; j < m; j ++ ) {
                if(!i || !j) continue;
                if(!matrix[i][j]) { 
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for(int i = 1; i < n; i ++ ) {
            if(!matrix[i][0]) {
                for(int j = 0; j < m; j ++ ) {
                    matrix[i][j] = 0;
                }
            } 
        }
        for(int i = 1; i < m; i ++ ) {
            if(!matrix[0][i]) {
                for(int j = 0; j < n; j ++ ) {
                    matrix[j][i] = 0;
                }
            }
        }
        if(!matrix[0][0]) {
            for(int i = 0; i < n; i ++ ) matrix[i][0] = 0;
            for(int i = 0; i < m; i ++ ) matrix[0][i] = 0;
        }
        if(flagx) {
            for(int i = 0; i < n ;i ++ ) {
                matrix[i][0] = 0;
            }
        }
        if(flagy) {
            for(int i = 0; i < m; i ++ ) {
                matrix[0][i] = 0;
            }
        }
    }
};
相关推荐
youtootech7 小时前
HarmonyOS《柚兔学伴》项目实战09-待办列表 UI——List+ForEach+滑动删除
数据结构·ui·华为·list·harmonyos
:-)8 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
Jerry12 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发13 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星13 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮13 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home840713 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>14 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC15 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC15 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode