美文网首页
每天进步一点点【2019.8.27】

每天进步一点点【2019.8.27】

作者: 天使的流浪 | 来源:发表于2019-08-27 20:54 被阅读0次

一、矩阵清零leetcode 73】

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

[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]

输出

[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

分析

1)找出0的位置
2)按行和列,将矩阵元素清零

代码

public void setZeroes(int[][] matrix) {
        // 检索0的位置
        int rows = matrix.length;
        int cols = matrix[0].length;
        HashSet<Integer> rowSet = new HashSet<Integer>();
        HashSet<Integer> colSet = new HashSet<Integer>();
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if(matrix[i][j]==0){
                    rowSet.add(i);
                    colSet.add(j);
                }
            }
        }
        // 将位置清零
        // 行清零
        for (int i = 0; i < cols; i++) {
            for(int item:rowSet){
                matrix[item][i] = 0;
            }
        }
        // 列清零
        for (int i = 0; i < rows; i++) {
            for(int item:colSet){
                matrix[i][item] = 0;
            }
        }
    }

存在问题:空间复杂度太高
优化方案:空间复杂度【从 O(m+n)降到O(1)】,第一列作为标记位,不断更新矩阵中的第一行和第一列的元素,然后根据第一行和第一列的值更新当前行和当前列;
代码

 public static void setZeroes(int[][] matrix) {
        // 用第一列作为标志列
        int rows = matrix.length;
        int cols = matrix[0].length;
        boolean colFlag = false;
        for (int i = 0; i < rows; i++) {
            // 标记第0列
            if(matrix[i][0]==0) colFlag = true;
            // 根据i的0对第0行和第0列处理
            for (int j = 1; j < cols; j++) {
                if(matrix[i][j]==0){
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        //根据第0列、第0行更新当前行和当前列
        for (int i = rows-1; i >=0; i--) {
            for (int j = cols-1; j >=1; j--) {
                if(matrix[i][0]==0 || matrix[0][j]==0){
                    matrix[i][j] = 0;
                }
            }
            if(colFlag) matrix[i][0] = 0;
        }
    }

二、每日一点心理学

贝勃定律:
原理:当人经历强烈的刺激后,再施予的刺激对他(她)来说也就变得微不足道;
表现
比如,原本一元钱的报纸变成了十元一份,你定会感到无法接受;而原本10000元的电脑涨了100元,你一定不会有什么大的反应;
应用
1) 有的商家起初一直把价位抬得很高,某天突然大幅减价,虽远远高于成本,却也会起到招引顾客的效果;
2) 一般有经验的谈判专家都是在谈判临近结束时才提出一些棘手的条件,而对方被一开始的优厚条件所诱惑,也就不怎么在意后来才知道的那些缺点了;

三、每日一句
I fell in love with him the way you fall asleep: slowly, and then all at once.

相关文章

  • 每天进步一点点(2019.8.27)

    昨天订的小目标,今日中午都已完成,不给自己太多压力,每天进步一点点,挺好。 1、育儿 任由大宝自由创作一翻。他开心...

  • 每天进步一点点【2019.8.27】

    一、矩阵清零leetcode 73】 题目描述:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列...

  • 目标与行动相结合

    每天进步一点点,记住方向,每天进步一点点!

  • 每天进步一点点

    每天进步一点点,成长足迹看得见。 每天进步一点点,走向成功是必然。 每天进步一点点,前进不止一小点。 每天进步一点...

  • 2017.8.9

    每天进步一点点 所谓的成长就是每天进步一点点,每周进步点点,每年进步一点点,然后观察复利效应,应该有不错的收益。 ...

  • 主动与被动的进步

    每天进步一点点,但是每天不会主动进步一点点。 每天做好这些事情,让自己每天都保持持续的进步。 随着时间的累积,年龄...

  • 集美与爱于一身的红玫瑰

    每天进步一点点,坚持就会进步

  • 临摹强化基本技能-如何看思维导图

    每天坚持一点点 每天进步一点点

  • 2018

    每天进步一点点。 每天开心一点点。

  • 每天一小步

    每天多做一点点,就是成功的开始;每天多创新一点点,就是领先的开始;每天多学一点点,就是进步的开始;每天多进步一点点...

网友评论

      本文标题:每天进步一点点【2019.8.27】

      本文链接:https://www.haomeiwen.com/subject/yjmyectx.html