每日一练

1-10Java选择题

  1. 下面关于构造方法的说法不正确的是 ()
    正确答案: B 你的答案: C (错误)
    A. 构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
    B.构造方法不可以重载
    C.构造方法没有返回值
    D. 构造方法一定要和类名相同

1.构造方法也是类的方法,可以在创建对象时为成员变量赋值
2.构造方法可以进行重载,但是参数列表必须不相同,不以返回值和访问级别进行区分
3.构造方法没有返回值
4.构造方法一定要与定义为public的类同名

  1. 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
    public class A
    {
    public int i;
    static String s;
    void method1(){}
    static void method2(){}
    }
    正确答案: C 你的答案: D (错误)
    A. System.out.println(a.i);
    B. a.method1();
    C. A.method1();
    D. A.method2();

静态成员和静态方法,可以直接通过类名进行调用;其他的成员和方法则需要进行实例化成对象之后,通过对象来调用。

  1. 以下程序的输出结果是
    public class Print{
    static boolean out(char c){
    System.out.println©;
    return true;
    }
    public static void main(String[] argv){
    int i = 0;
    for(out(‘A’);out(‘B’) && (i<2);out(‘C’)){
    i++;
    out(‘D’);
    }
    }
    }
    正确答案: A 你的答案: C (错误)
    A. ABDCBDCB
    B. BCDABCD
    C. 编译错误
    D. 运行错误

for循环执行开始
首先执行out(‘A’) 输出A;
然后执行out(‘B’)&&(i<2)此时输出B,i=0,判断条件为真,执行for循环的循环体;
执行i++,out(‘D’),输出D i=1;
执行out(‘C’),输出C
然后执行out(‘B’)&&(i<2) 此时输出B,i=1 判断条件为真 ,执行for循环的循环体;
执行i++,out(‘D’),输出D i=2;
执行out(‘C’),输出C
然后执行out(‘B’)&&(i<2) 此时输出B,i=2,不满足i<2 判断条件为假 ,跳出循环;
所以结果为ABDCBDCB

  1. 以下代码段执行后的输出结果为
    public class Test {
    public static void main(String[] args) {
    System.out.println(test());
    }
    private static int test() {
    int temp = 1;
    try {
    System.out.println(temp);
    return ++temp;
    } catch (Exception e) {
    System.out.println(temp);
    return ++temp;
    } finally {
    ++temp;
    System.out.println(temp);
    }
    }
    }
    正确答案: D 你的答案: B (错误)
    A. 1,2,2
    B. 1,2,3
    C. 1,3,3
    D. 1,3,2

执行顺序为:
输出try里面的初始temp:1;
temp=2;
保存return里面temp的值:2;
执行finally的语句temp:3,输出temp:3;
返回try中的return语句,返回存在里面的temp的值:2;
输出temp:2。

  1. 以下哪些方法可以取到http请求中的cookie值()?
    正确答案: B D 你的答案: B D (正确)
    request.getAttribute
    request.getHeader
    request.getParameter
    request.getCookies

request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据

  1. 如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
    nums.add(6);
    nums.add(0,4);
    nums.remove(1);
    正确答案: B 你的答案: C (错误)
    A. [5, 3, 1, 6]
    B. [4, 3, 1, 6]
    C. [4, 3, 6]
    D. [5, 3, 6]

初始化为{5,3,1}
nums.add(6)后list为{5,3,1,6}
nums.add(0,4)是在0号索引上添加数字4得到list为{4,5,3,1,6}
nums.remove(1)是将1号索引上的5进行remove得到list为{4,3,1,6}

  1. 以下描述正确的是
    正确答案: B 你的答案: C (错误)
    A.CallableStatement是PreparedStatement的父接口
    B. PreparedStatement是CallableStatement的父接口
    C. CallableStatement是Statement的父接口
    D. PreparedStatement是Statement的父接口

public interface CallableStatement extends PreparedStatement
public interface PreparedStatement extends Statement

  1. 下面程序的输出结果是什么。
    public class A2{
    public static void main(String[] args){
    int[] a={2,4,6,8,3,6,9,12};
    doSomething(a,0,a.length-1);
    for(int i=0;i<=a.length-1;i++)
    System.out.print(a[i]+" ");
    }
    private static void doSomething(int[] a,int start,int end){
    if(start<end){
    int p=core(a,start,end);
    doSomething(a,start,p-1);
    doSomething(a,p+1,end);
    }
    }
    private static int core(int[] a,int start,int end)
    {
    int x=a[end];
    int i=start;
    for(int j=start;j<=end-1;j++){
    if(a[j]>=x){
    swap(a,i,j);
    i++;//交换了几次
    }
    }//把最大的放到最后
    swap(a,i,end);//把最大的放到i的位置
    return i;
    }
    private static void swap(int[] a,int i,int j)
    {
    int tmp=a[i];
    a[i]=a[j];
    a[j]=tmp;
    }
    }
    正确答案: C 你的答案: D (错误)
    找到最大值
    找到最小值
    从大到小的排序
    从小到大的排序
  2. 下面有关Java的说法正确的是( )
    正确答案: A C D F 你的答案: A B D (错误)
    一个类可以实现多个接口
    抽象类必须有抽象方法
    protected成员在子类可见性可以修改
    通过super可以调用父类构造函数
    final的成员方法实现中只能读取类的成员变量
    String是不可修改的,且java运行环境中对string对象有一个对象池保存

c选项意思是父类中的protected方法子类在重写的时候访问权限可以修改

  1. 下面有关java的引用类型,说法正确的有?
    正确答案: A B C D 你的答案: B D (错误)
    A. 对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
    B. 如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
    C. 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
    D. 一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间

1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。
11-20数量关系选择题

  1. 【数字部分】3名小学毕业生有4所不同的中学可以选择,不同的结果有( )种。
    正确答案: C 你的答案: C (正确)
    7
    12
    64
    81

每名学生选学校结果各自不影响,所以每名学生都有4种选法,即444=64种

  1. 请根据下列数字的规律,推测括号中的数字应该是多少? 20/9,4/3,7/9,4/9,1/4,( )
    正确答案: A 你的答案: B (错误)
    5/36
    1/6
    1/9
    1/144

20/9 ➗4/3 = 5/3
7/9 ➗4/9 = 7/4
1/4 ➗? = 9/5

  1. 1009年元旦是星期四,那么1999年元旦是星期几?
    正确答案: B 你的答案: A (错误)
    A. 二
    B. 五
    C. 六
    D. 七

如果1009年元旦是星期四,那么1999年元旦确实是星期五。
(1)平年是365天,闰年是366天,365/7余数为1,即每个元旦比上一年的星期数后推1天;
闰年是366/7余数是2,即每个元旦比上一年的星期数后推2天。
(2)计算出有多少个闰年,多少个平年。闰年的定义:1,能被4整除.;2,后面两位是0的年份必须被400整除。
(1999-1009)/4=247 (其中1100,1300,1400,1500,1700,1800,1900共7个不是闰年)。所以:
闰年是247-7=240个,
平年是(1999-1009)-240=750个。
(3)闰年240个,240/7余数2,余下2个闰年,相当于经过2个闰年往后推的天数,则闰年后推天数为22=4天。
平年750个,750/7余数1,余下1个平年,相当于经过1个平年往后推的天数,则平年后推天数为1
1=1天。
综上所述,后推天数是闰年4天+平年1天=5天,所以1999年元旦是星期二。

  1. 请根据下列数字的规律,推测括号中的数字应该是多少?6 , 4 , 8 , 9 , 12 , 9 , ( ) , 26 , 30
    正确答案: B 你的答案: C (错误)
    A. 12
    B. 16
    C. 18
    D. 22

答案是16
解题思路:
前后相对应的数相加是等差数列:
6+30=36
4+26=30
8+?=??
9+ 9=18
12
可以看出他们是公差为6的等差数列,所以,??应为24,从而得出?=24-8=16.

  1. 某商铺甲乙两组 利用包装礼品的边角料制作一批花朵装饰门店。甲组单独制作需要10小时,乙组单独制作需要15小时,现两组一起做,期间乙组休息了1小时40分钟,完成时甲组比乙组多做300朵,问这批花有多少多?
    正确答案: D 你的答案: B (错误)
    1350
    1500
    600
    900

速度:甲 ,乙
设乙做了t分钟,则:
得t=300
设这批花有n朵,则
得n=900
16-20判断推理选择题

  1. 正确答案: B 你的答案: B (正确)
    A
    B
    C
    D
    在这里插入图片描述

  2. 正确答案: B 你的答案: B (正确)
    A.在这里插入图片描述
    B.在这里插入图片描述
    C.在这里插入图片描述
    D. 在这里插入图片描述

在这里插入图片描述

  1. 乡间公路上发生一起车祸,肇事司机是位女性,据这位女司机介绍,当时她发现路边有一家餐馆准备停车用餐,误将油门当刹车,汽车径直向前撞向路边车辆,连撞两车后方才停下,万幸的是车上乘客仅受轻伤。有目击者对这起车祸做出如下评论,女司机更容易出车祸。
    以下哪项如果为真,最能质疑上述评论( )
    正确答案: D 你的答案: B (错误)
    有的男司机开车时比较敏捷和果断,很少出车祸
    有的女司机开车时比较细心和冷静,很少出车祸
    肇事司机已有8年驾龄,技术娴熟,以前从未出过车祸
    女司机各有不同,对肇事女司机不能轻率概括、以点概面

逻辑上的“削弱”是有要求的:要在不质疑对方论据的前提下,指出论点未必成立。就这题而言:
论据:一个女司机开车发生了严重的事故
论点:女司机更容易出车祸
首先我们承认,B选项是可以削弱上述论证的。但它力度不够强的原因是它提出了一个与题干相反的论据来作证,这就差事了。另外,通过个例来削弱或加强的力度永远是最差的(除非题干把话说得很绝,例如“所有女司机都容易出车祸”,这时B是最强削弱)。
再看D选项。它完全承认题干的论据是真实的,但同时指出,就算论据是真的,也不能用它来支撑论点。这才是逻辑上的削弱。

  1. 正确答案: C 你的答案: E (错误)
    A
    B
    C
    D
    E
    F
    G
    H在这里插入图片描述

把第一列和第三列看作光线
把第二列看作镜面

  1. 从世界经济的发展历程来看,如果一国或地区的经济保持着稳定的增长速度,大多数商品和服务的价格必然随之上涨,只要这种涨幅始终在一个较小的区间内就不会对经济造成负面影响。
    由此可以推出,在一定时期内:
    正确答案: C 你的答案: B (错误)
    如果大多数商品价格上涨,说明该国经济正在稳定增长
    如果大多数商品价格涨幅过大,对该国经济必然有负面影响
    如果大多数商品价格不上涨,说明该国经济没有保持稳定增长
    如果经济发展水平下降,该国的大多数商品价格也会降低

肯前必肯后,否后必否前
21-20智力题

  1. 三兄弟中,每两人的平均年龄加另一人的年龄之和分别是58,69,71,那么这三兄弟中年龄最大的与最小的相差几岁?
    正确答案: C 你的答案: A (错误)
    32
    28
    26
    24

三人年龄分别为x,y,z.根据题意可列出方程
(x+y)/2+z=58 (1)
(x+z)/2+y=69 (2)
(y+z)/2+x=70 (3)
(3)-(1)可得x-z=24 (3)-(2)可得x-y=2 (2)-(1)可得y-z=22 即最大的和最小的相差24岁。

  1. 有一种体育竞赛共含M个项目,有运动员A,B,C三人参加,在每一项目中,第一,第二,第三名分别得X,Y,Z分,其中X,Y,Z为正整数且X>Y>Z。最后A得22分,B与C均得9分,B在百米赛中取得第一。求M的值及在跳高中谁得第二名。
    正确答案: B 你的答案: C (错误)
    5, A
    5, C
    4, B
    4, A

M个项目的总分:22+9+9=40
若M=4,则X+Y+Z=10,由X>Y>Z可知
X Y Z
7 2 1
6 3 1
5 3 2
5 4 1
又因为A得22分,故4X>22,那么只有第一种情况满足
即A得分为7 7 7 1,但是这样的话,B和C得分永远不能为9,故矛盾
若M=5,则X+Y+Z=8,由X>Y>Z可知
X Y Z
5 2 1
4 3 1
又A=22,故只有第一种情况满足,故A、B、C得分如下:
A 5 5 5 5 2
B 5 1 1 1 1
C 1 2 2 2 2
故百米赛A得第二,B得第一,C得第三,故C其他项目均得第二,即跳高中C得第二

  1. 2 ,2 ,8 ,38 ,( )
    正确答案: D 你的答案: D (正确)
    76
    81
    144
    182

c=5*b-a,相邻三个数分别为a,b,c

  1. 站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?
    正确答案: D 你的答案: B (错误)
    1
    2
    0
    无数个

距离南极点很近的一个圈上也满足这个条件。在这个圆圈上,向南走一公里,然后向东走一公里恰好绕南极点一圈,向北走一公里回到原点。所以地球上总共有无数点满足这个条件。
或者首先,在地球表面上,南北走向是沿着经度方向,东西是沿着纬度方向。如果你一直往北走就会达到北极点,往南走就到了南极点。因此,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点,一种情况就是,出发点是在北极点,这样向南走一公里,然后向东走任意几公里,最后向北走一公里,最后都会回到北极点;其次,可以这么认为如果从A点向南走一公里到达B点,那么若向东走一公里能回到B,那么最后向北走一公里,就能回到了原点A。这样就可以先找出在南北极点附近找出绕一周只有1公里的圈,那么这个圈落在南极附近时,只要往北推1公里,此时该圈上的点都能满足;若这个圈落在北极附近时,能不能往北推1公里我就不分析了。反正在南极附近能找到任意多个点就能回到这个问题了。

  1. A、B、C、D四人应聘一个程序员职位,此职务的要求条件是:Java熟练;懂数据库开发;会Web开发;有C++经验。谁满足的条件最多,谁就被雇用。(1)把上面四个要求条件两两组合,每个组合都恰有一人满足。同时已知(2)A和Bjava熟练(3)B和C会Web(4)C和D懂数据库(5)D有C++经验那么,被雇用的是____。
    正确答案: B 你的答案: A (错误)
    A
    B
    C
    D
    四人机会均等
    以上均错

根据已知条件,列出当前了解的技能掌握情况
Java:A和B
WEB:B和C
数据库:C和D
c++:D和B
再写出六种技能组合,结合已知条件进行推测。
Java Web:B会,所以A肯定不会Web (因为A会Java)
Java 数据库:
Java c++:
web 数据库:C会,所以B不会数据库(因为B会WEB),D不会WEB(D会数据库)。
数据库 c++:D会,所以C不会 C++(因为C会WEB)
WEB c++:排除了ACD,只能是B会。
所以能推断出B会三项技能,java web和c++。且只能有一个人会三项技能及以上,否则就不满足"每个组合都恰有一人满足"的条件,故B是会的技能最多的。

LeetCode
743. 网络延迟时间
有 n 个网络节点,标记为 1 到 n。
给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。
现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。

示例 1:
输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
输出:2

输入:times = [[1,2,1]], n = 2, k = 1
输出:1
示例 3:

输入:times = [[1,2,1]], n = 2, k = 2
输出:-1

方法一:深度优先搜索 [Accepted]
让我们记录信号到达节点的时间,若有的信号提前达到,则我们不需要广播这个信号,否则我们将广播这个信号。

算法:
dist[node] 记录的是信号最早到达 node 的时间。当我们访问 node 时,若经过了传递时间这个信号是最早到达该节点的,则我们广播这个信号
为了加快速度,在访问每个节点时,若传递该信号的时间比已有信号到达的时间长,则我们退出该信号。

class Solution {
    Map<Integer, Integer> dist;
    public int networkDelayTime(int[][] times, int N, int K) {
        Map<Integer, List<int[]>> graph = new HashMap();
        for (int[] edge: times) {
            if (!graph.containsKey(edge[0]))
                graph.put(edge[0], new ArrayList<int[]>());
            graph.get(edge[0]).add(new int[]{edge[2], edge[1]});
        }
        for (int node: graph.keySet()) {
            Collections.sort(graph.get(node), (a, b) -> a[0] - b[0]);
        }
        dist = new HashMap();
        for (int node = 1; node <= N; ++node)
            dist.put(node, Integer.MAX_VALUE);

        dfs(graph, K, 0);
        int ans = 0;
        for (int cand: dist.values()) {
            if (cand == Integer.MAX_VALUE) return -1;
            ans = Math.max(ans, cand);
        }
        return ans;
    }

    public void dfs(Map<Integer, List<int[]>> graph, int node, int elapsed) {
        if (elapsed >= dist.get(node)) return;
        dist.put(node, elapsed);
        if (graph.containsKey(node))
            for (int[] info: graph.get(node))
                dfs(graph, info[1], elapsed + info[0]);
    }
}

方法二:迪杰斯特拉最短路径算法(Dijkstra’s)[Accepted]
算法:

我们使用 Dijkstra’s 算法找到从源节点到所有节点的最短路径,可以点击这个链接了解更多详细信息。
Dijkstra’s 算法是每次扩展一个距离最短的点,更新与其相邻点的距离。
在下面的代码中,我们展示了 O(N^2)O(N
2
) 的基本实现方法 和 O(N \log N)O(NlogN) 用堆实现的方法。

class Solution {
    Map<Integer, Integer> dist;
    public int networkDelayTime(int[][] times, int N, int K) {
        Map<Integer, List<int[]>> graph = new HashMap();
        for (int[] edge: times) {
            if (!graph.containsKey(edge[0]))
                graph.put(edge[0], new ArrayList<int[]>());
            graph.get(edge[0]).add(new int[]{edge[1], edge[2]});
        }
        dist = new HashMap();
        for (int node = 1; node <= N; ++node)
            dist.put(node, Integer.MAX_VALUE);

        dist.put(K, 0);
        boolean[] seen = new boolean[N+1];

        while (true) {
            int candNode = -1;
            int candDist = Integer.MAX_VALUE;
            for (int i = 1; i <= N; ++i) {
                if (!seen[i] && dist.get(i) < candDist) {
                    candDist = dist.get(i);
                    candNode = i;
                }
            }

            if (candNode < 0) break;
            seen[candNode] = true;
            if (graph.containsKey(candNode))
                for (int[] info: graph.get(candNode))
                    dist.put(info[0],
                             Math.min(dist.get(info[0]), dist.get(candNode) + info[1]));
        }

        int ans = 0;
        for (int cand: dist.values()) {
            if (cand == Integer.MAX_VALUE) return -1;
            ans = Math.max(ans, cand);
        }
        return ans;
    }
}

堆实现的方式:



PythonJava

class Solution {
    public int networkDelayTime(int[][] times, int N, int K) {
        Map<Integer, List<int[]>> graph = new HashMap();
        for (int[] edge: times) {
            if (!graph.containsKey(edge[0]))
                graph.put(edge[0], new ArrayList<int[]>());
            graph.get(edge[0]).add(new int[]{edge[1], edge[2]});
        }
        PriorityQueue<int[]> heap = new PriorityQueue<int[]>(
                (info1, info2) -> info1[0] - info2[0]);
        heap.offer(new int[]{0, K});

        Map<Integer, Integer> dist = new HashMap();

        while (!heap.isEmpty()) {
            int[] info = heap.poll();
            int d = info[0], node = info[1];
            if (dist.containsKey(node)) continue;
            dist.put(node, d);
            if (graph.containsKey(node))
                for (int[] edge: graph.get(node)) {
                    int nei = edge[0], d2 = edge[1];
                    if (!dist.containsKey(nei))
                        heap.offer(new int[]{d+d2, nei});
                }
        }

        if (dist.size() != N) return -1;
        int ans = 0;
        for (int cand: dist.values())
            ans = Math.max(ans, cand);
        return ans;
    }

复杂度分析
时间复杂度: EE 是 times 的长度。基础实现方式为 O(N^2 + E)O(N
2
+E)。堆实现方式为 O(E \log E)O(ElogE),因为每个边都可能添加到堆中。
空间复杂度:O(N + E)O(N+E),图的大小是 O(E)O(E) 加上其他对象的大小 O(N)O(N)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值