Dodd

dont be shy, just try!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 友情链接

  • links

  • 公益404

  • 搜索

求两个正整数的最大公约数

发表于 2017-10-28 | 分类于 数据结构与算法 , 算法题 | | 阅读次数:

题目

求两个正整数的最大公约数,要求尽可能保证性能。

方法一:暴力枚举法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static int getGreatestCommonDivisor(int numA, int numB){
int samllNum = numA < numB ? numA : numB;
int bigNum = numA > numB ? numA : numB;

if(bigNum % samllNum){
return samllNum;
}

int greatestCommonDivisor = 1;

for(int i = 2; i <= samllNum/2; i++){
if(numA % i == 0 && numB & i == 0){
greatestCommonDivisor = i;
}
}

return greatestCommonDivisor;
}

暴力枚举的效率比较低,如果传入10000和10001,则需要循环4900次。

阅读全文 »

位运算:判断2的乘方

发表于 2017-10-26 | 分类于 数据结构与算法 , 算法题 | | 阅读次数:

题目

实现一个方法,判断一个正整数是否是2的乘方(比如16是2的4次方,返回True;18不是2的乘方,返回False)。要求性能尽可能高。

解法一:

创建一个中间变量Temp,初始值是1。然后进入一个循环,循环中每次让Temp和目标整数比较,如果相等,则说明目标整数是2的乘方;如果不相等,则让Temp增大一倍,继续循环比较。当Temp大于目标整数时,说明目标整数不是2的乘方。

如果目标整数的大小是N,则此方法的时间复杂度是O(LogN)。

1
2
3
4
5
6
7
8
9
10
11
12
public static boolean isPowerOf2(int number){
int temp = 1;
while(temp <= number){
if(temp == number){
return true;
}
//temp = temp * 2;
//优化点:乘以2操作改成左移1位
temp = temp << 1;
}
return false;
}
阅读全文 »

Oracle高级查询之子查询

发表于 2017-10-06 | 分类于 数据库 | | 阅读次数:

介绍

查询工资比scott高的员工:

1
SQL> select * from emp where sal > (select sal from emp where ename = 'scott');
阅读全文 »

Oracle高级查询之分组查询

发表于 2017-10-06 | 分类于 数据库 | | 阅读次数:

一、常用分组函数

1
2
3
4
5
6
7
SQL> select avg(sal),sum(sal),max(sal),min(sal) from emp;
select count() from emp; --计数
select count(distinct deptno) from emp;

--vm_concat:行转列
select deptno 部门号,vm_concat(ename) 部门中员工的姓名 from emp group by deptno;
set linesize 200; --设置行列的宽度
阅读全文 »

Oracle高级查询之多表查询

发表于 2017-10-04 | 分类于 数据库 | | 阅读次数:

SQL表连接

多表查询分为 内连接、外连接和交叉连接。现在有表A和表B:

TableA TableB
id name id age
1 n1 1 18
2 n2 2 20
4 n4 3 19
阅读全文 »

java设计模式(二十三)解释器模式(Interpreter)

发表于 2017-09-17 | 分类于 JAVA , 设计模式 | | 阅读次数:

介绍

解释器模式(Interpreter Pattern) :定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的语言意思是使用规定格式和语法的代码,它是一种类行为型模式。

解释器模式一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。

关系图:

阅读全文 »

java设计模式(二十二)中介者模式(Mediator)

发表于 2017-09-17 | 分类于 JAVA , 设计模式 | | 阅读次数:

介绍

中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。

关系图:

阅读全文 »

java设计模式(二十一)访问者模式(Visitor)

发表于 2017-09-17 | 分类于 JAVA , 设计模式 | | 阅读次数:

介绍

访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。

简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。

关系图:

阅读全文 »

java设计模式(二十)状态模式(State)

发表于 2017-09-17 | 分类于 JAVA , 设计模式 | | 阅读次数:

介绍

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对外看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:

  1. 可以通过改变状态来获得不同的行为。
  2. 你的好友能同时看到你的变化。

关系图:

阅读全文 »

java设计模式(十九)备忘录模式(Memento)

发表于 2017-09-17 | 分类于 JAVA , 设计模式 | | 阅读次数:

介绍

备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。

主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。

关系图:

阅读全文 »
1…121314…18
dodd

dodd

不吃狗粮,不喝鸡汤

175 日志
22 分类
26 标签
微博 知乎
Links
  • JavaChen
  • 酷壳
© 2020 dodd
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.3