编写程序,计算下面函数的值并输出。

muiti-case-simple.png

首先定义 vcIO.inc
.686         ;使用686指令集
.MODEL flat, stdcall       ;使用flat平坦内存模式
option casemap : none      ; 大小写不敏感

;函数声明
printf     PROTO C : dword,:vararg  ;vararg参数:变参,参数个数不确定
scanf     PROTO C : dword,:vararg  ;dword参数 :格式描述串的有效地址。
_getch    PROTO C : vararg         ;注意:所有的参数都是dword型!

- 阅读剩余部分 -

在给定的网格中,每个单元格可以有以下三个值之一:

值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,任何与腐烂的橘子(在 4
个正方向上)相邻的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。

题目链接: https://leetcode-cn.com/problems/rotting-oranges/

破题思路

每一轮,腐烂将会从每一个烂橘子蔓延到与其相邻的新鲜橘子上。一开始,腐烂的橘子拥有深度为 0,每一轮腐烂会从腐烂橘子传染到之相邻新鲜橘子上,并且设置这些新的腐烂橘子的深度为自己深度 +1,我们想知道完成这个过程之后的最大深度值是多少。

算法

我们可以用一个宽度优先遍历来建模这一过程。因为我们总是选择去使用深度值最小的(且之前未使用过的)腐烂橘子去腐化新鲜橘子,如此保证每一个橘子腐烂时的深度标号也是最小的。

我们还应该检查最终状态下,是否还有新鲜橘子。


- 阅读剩余部分 -

java 中的clone 方法

尽量不要使用 clone 方法来克隆一个对象

拷贝

引用拷贝

创建一个指向对象的引用变量的拷贝。

public static void main(String[] args) {
        Stu stu = new Stu(22, "卢本伟");
        Stu stu1 = stu;
        System.out.println(stu);
        System.out.println(stu1);
    }

输出结果:

Stu{age=22, name='卢本伟'}
Stu{age=22, name='卢本伟'}

clone.png

在讨论深浅拷贝之前,我们先定义两个类

- 阅读剩余部分 -

equals() 和 hashCode() 区别

转载自:https://www.cnblogs.com/jesonjason/p/5492208.html

equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。

hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。

之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。

两个obj,如果equals()相等,hashCode()一定相等。

两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。

所以:在集合中,判断两个对象是否相等的规则是:

第一步,如果hashCode()相等,则查看第二步,否则不相等;

第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

为什么选择hashcode方法?

以java.lang.Object来理解,JVM每new一个Object,它都会将这个Object丢到一个 Hash 哈希表中去,这样的话,下次做 Object 的比较或者取这个对象的时候,它会根据对象的 hashcode 再从 Hash 表中取这个对象。这样做的目的是提高取对象的效率。具体过程是这样:

- 阅读剩余部分 -