热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Leetcode刷题记代码优化记录

目前刚看完数组的基础篇,再看数组的基础题目,这次的题目是832题,属于简单类型https:leetcode.comproblemsflip

目前刚看完数组的基础篇,再看数组的基础题目,这次的题目是832题,属于简单类型
https://leetcode.com/problems/flipping-an-image/


Flipping an Image


Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.


To flip an image horizontally means that each row of the image is reversed. For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].


To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].



Example 1:


Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]



Example 2:


Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]



Notes:


1 <&#61; A.length &#61; A[0].length <&#61; 20
0 <&#61; A[i][j] <&#61; 1



第一次代码提交

第一次我重新定义了一个新的二维数组&#xff0c;用来存放&#xff0c;所以就会特别的麻烦。

//1. 第一版public static int[][] flipAndInvertImage(int[][] A) {int m &#61; A.length;if (m &#61;&#61; 0) return A;int n &#61; A[0].length &#61;&#61; 0 ? 0 : A[0].length;int[][] B &#61; new int[m][n];for (int i &#61; 0; i < m; i&#43;&#43;) {for (int j &#61; 0; j < n; j&#43;&#43;) {B[i][j] &#61; A[i][j];}}for (int i &#61; 0; i < m; i&#43;&#43;) {for (int j &#61; 0; j < n; j&#43;&#43;) {B[i][A[i].length - 1 - j] &#61; A[i][j] &#61;&#61; 1 ? 0 : 1;}}return B;}

第二版

这一版进行了更新&#xff0c;我直接在数组A上面进行了操作&#xff0c;这样不用重新定义数组B&#xff0c;不需要开辟数组A那么大得一块儿空间

//2.第二版public static int[][] flipAndInvertImage(int[][] A) {int m &#61; A.length;if (m &#61;&#61; 0) return A;int n &#61; A[0].length &#61;&#61; 0 ? 0 : A[0].length - 1;int temp;for (int i &#61; 0; i < m; i&#43;&#43;) {for (int j &#61; 0; j < n / 2 &#43; 1; j&#43;&#43;) {temp &#61; A[i][j];A[i][j] &#61; A[i][n - j] &#61;&#61; 0 ? 1 : 0;A[i][n - j] &#61; temp &#61;&#61; 0 ? 1 : 0;}}return A;}

第三版

最后一版&#xff0c;我又画了for循环&#xff0c;这样看起来更加清晰&#xff0c;操作起来更加的方便。

// 3. 第三版public static int[][] flipAndInvertImage(int[][] A) {int m &#61; A.length;if (m &#61;&#61; 0) return A;int temp, n;for (int nums[] : A) {n &#61; nums.length - 1;for (int j &#61; 0; 2 * j <&#61; n; j&#43;&#43;) {temp &#61; nums[j];nums[j] &#61; nums[n - j] &#61;&#61; 0 ? 1 : 0;nums[n - j] &#61; temp &#61;&#61; 0 ? 1 : 0;}}return A;}

总结

三次提交代码的性能都有变化&#xff0c;可以从这其中发现很多可以优化的地方&#xff0c;也很有意思
下面这是三次散发性能的结果
在这里插入图片描述


不同语言对比

有大神给出了三种语言的代码&#xff0c;完全体现出了py代码的简洁&#xff0c;还体现出了Java代码巧妙地利用方式
在这里插入图片描述


推荐阅读
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
author-avatar
手机用户2602917665
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有