9月7日海康威视笔试
选择都是知识点,没有特别值得记录的
编程简答题:
1.简单的INSERT和SELECT语句
2.写一个简单的工厂模式:(当时没写出来,现在也不记得到底是工厂模式还是简单工厂模式了)
这里首先要区别工厂模式和简单工厂模式是不同的
这里以手机厂为例子编写
2.1简单工厂模式涉及到了 Factory工厂类,IProduct抽象产品类,Product具体产品类
//抽象产品类,一个抽象方法开机 public abstract class Cellphone{ public abstract void start(); }
//具体产品类继承抽象产品类并重写开机方法 public class HuaweiPhone extends Cellphone{ @Override public void start(){ System.out.println("华为手机开机"); } } public class MiPhone extends Cellphone{ @Override public void start(){ System.out.println("小米手机开机"); } } public class OPPOPhone extends Cellphone{ @Override public void start(){ System.out.println("OPPO手机开机"); } }
//工厂编写一个生产手机的方法,根据类型调用具体的构造器创建手机对象并返回 public class CellphoneFactory{ public static Cellphone createCellphone(String type){ Cellphone mCellphone = null; switch(type){ case "Huawei": mCellphone = new HuaweiPhone(); break; case "Mi": mCellphone = new MiPhone(); break; case "OPPO": mCellphone = new OPPOPhone(); break; } return mCellphone; } }2.2工厂模式和简单工厂模式不同的是,工厂模式涉及到的是 抽象工厂类、具体工厂类、抽象产品类、具体产品类,如果想要增加新的产品只需要新建一个产品类即可动态的生产,而简单工厂模式想要增加新的产品需要修改工厂的生产逻辑,增加新的分支,违反了开放封闭原则。
工厂模式是首先创造一个抽象工厂,具体工厂继承抽象工厂并重写它的生产方法,根据传入的类型,利用反射机制动态的创建一个类的实例,并返回该实例,具体代码这里就不写了。
3.求最小子序列合,要求时间复杂度是O(n)
3.求最小子序列合,要求时间复杂度是O(n)
因为题目要求返回的是最小的合的值,不需要返回最小序列的起始下标,所以实现要相对简单,具体思路如下
设置临时变量temp=0和结果min=nums[0];
遍历整个数组,令temp+=nums[i];
没遍历一个元素,进行一次判断,首先判断temp是否小于min,如果小于则令min=temp,如果不小于则再判断temp是否小于0.因为如果temp此时大于0的话不如从下一个数重新开始计数得到的结果小,所以如果temp不小于0,则将temp重新置0;
这样得到结果只需要遍历一次数组所以时间复杂度是O(n)
全部评论
(1) 回帖