力扣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;
            }
        }
    }
};
相关推荐
逸狼16 分钟前
【Java 优选算法】二分算法(下)
数据结构
uhakadotcom1 小时前
Apache Airflow入门指南:数据管道的强大工具
算法·面试·github
跳跳糖炒酸奶1 小时前
第四章、Isaacsim在GUI中构建机器人(2):组装一个简单的机器人
人工智能·python·算法·ubuntu·机器人
绵绵细雨中的乡音2 小时前
动态规划-第六篇
算法·动态规划
程序员黄同学2 小时前
动态规划,如何应用动态规划解决实际问题?
算法·动态规划
march_birds2 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
斯汤雷3 小时前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
云 无 心 以 出 岫3 小时前
贪心算法QwQ
数据结构·c++·算法·贪心算法
俏布斯3 小时前
算法日常记录
java·算法·leetcode
独好紫罗兰3 小时前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法