20201020:算法+错题

错题一

  • 关于AOP错误的是?

    答案及解析:C
AOP:Aspected Oriented Programming 面向方面编程
AOP将程序分解为各个方面或者关注点,偏重于业务处理过程的某个步骤或阶段,强调降低模块之间的
耦合度,使代码拥有更好的移植性。
OOP:面向对象编程
OOP是对业务分析中抽取的实体进行方法和属性的封装。
也可以说AOP是面向业务中的动词领域,OOP是面向名词领域。
AOP的一个很重要的特点就是源代码无关性,也就是说如果我们的系统中引用了AOP组件,即使我们把
该组件去掉,系统代码也应该能够编译通过,要实现这一点,可以使用动态proxy模式。

错题二

  • 有关线程的叙述正确的是()

    答案及解析:C
A:如果变量用volatile修饰,则变量是线程共享的,无法获得该变量的互斥锁。
B:线程的创建方式与线程之间互斥无关
C:synchronized关键字可以实现互斥
D:线程的创建可以通过继承Thread类或者实现Runnable接口来实现。

错题三

  • Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点

    答案及解析:B
容器的左上角被确定为坐标的起点

错题四

  • @SuppressWarnings(“deprecation”)的功能是什么?

    答案及解析:A
Java三大注解分别是@Override @Deprecated @Suppresswarnings
@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错
@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等
@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂
编译器提示的警告,不能更好的选择更好的类去完成任务

算法一

  • 重排链表

    给定一个单链表 L:L0→L1→…→Ln-1→Ln ,

    将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例1:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.

示例2:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
思路:
1.找到链表的中间节点,将链表断开,将右半部分链表反转,将这两部分链表合并。
2.我们可以对每一步都实现一个单独的方法,这样既简单又清晰
3.所以,从宏观上看,该题考查的是对链表不用操作的实现。

class Solution {
    public void reorderList(ListNode head){
        if (head==null){
            return;
        }
        //找到整个链表的中间节点
        ListNode mid=findMidNode(head);
        //将整个链表分成2个链表
        ListNode head1=head;
        ListNode head2=mid.next;
        mid.next=null;
        //将第二个链表进行反转
        head2=revereList(head2);
        //合成两个链表
        mergeList(head1,head2);
    }

    private void mergeList(ListNode head1, ListNode head2) {
        ListNode t1=null,t2=null;
        while(head1!=null&&head2!=null){
            //防止链表断开
            t1 = head1.next;
            t2 = head2.next;

            head1.next = head2;
            head2.next = t1;

            head1 = t1;
            head2 = t2;
        }
    }

    private ListNode revereList(ListNode head) {
        if (head==null){
            return null;
        }
        ListNode pre=null;
        ListNode cur=head;
        while(cur!=null){
            ListNode next = cur.next;
            cur.next = pre;
            pre=cur;
            cur=next;
        }
        return pre;
    }

    private ListNode findMidNode(ListNode head) {
        if (head==null){
            return null;
        }
        ListNode fast=head,slow=head;
        while(fast!=null&&fast.next!=null){
            slow=slow.next;
            fast=fast.next.next;
            if (fast==null){
                return slow;
            }
        }
        return slow;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值