携程笔试两道AC,最后一道有思路没时间了

第一道是单链表按某值划分,要求不能改变数组内的相对顺序

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Main {

    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
            next = null;
        }
    }

    /*请完成下面这个函数,实现题目要求的功能
     ******************************开始写代码******************************/
    static ListNode partition(ListNode head,int m) {
        ListNode prel=null;
        ListNode prer=null;
        ListNode rigl=null;
        ListNode rigr=null;
        ListNode next;
        while (head!=null){
            next=head.next;
            if(head.val<=m){
                if(prel==null){
                    prel=head;
                    prer=head;
                }else {
                    prer.next=head;
                    prer=head;
                }
            }else {
                if(rigl==null){
                    rigl=head;
                    rigr=head;
                }else {
                    rigr.next=head;
                    rigr=head;
                }
            }
            head=next;
        }
        if(prer!=null)
        prer.next=rigl;
        return prel==null?rigl:prel;
    }
    /******************************结束写代码******************************/


    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        ListNode head=null;
        ListNode node=null;
        int m=in.nextInt();
        while(in.hasNextInt()){
            int v=in.nextInt();
            if(head==null){
                node=new ListNode(v);
                head=node;
            }else{
                node.next=new ListNode(v);
                node=node.next;
            }
        }
        head= partition(head,m);
        if(head!=null){
            System.out.print(head.val);
            head=head.next;
            while(head!=null){
                System.out.print(",");
                System.out.print(head.val);
                head=head.next;
            }
        }
        System.out.println();
    }
}




第二道是翻转最外层括号的字符串,里面有括号不翻转,最后输出没有括号的结果((ur)oi)-》iour
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Main2 {


    /*请完成下面这个函数,实现题目要求的功能
    当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
    ******************************开始写代码******************************/
    static String resolve(String expr) {

        int count=0;
        int left=0;
        int right=0;
        String str ="";
        char[] arr=expr.toCharArray();
        for(int i=0;i<arr.length;i++){
            if(arr[i]=='('){

                if(++count==2){
                    left=i+1;
                }
            }
            if(arr[i]==')'){

                if(--count==1){
                    right=i-1;
                    swap(arr,left,right);
                }
            }
            if(count<0){

                return "";
            }
            if(i==arr.length-1&&count>0){

                return "";
            }
        }
        swap(arr,0,arr.length-1);
        for(int i=0;i<arr.length;i++){
            if(arr[i]!='('&&arr[i]!=')'){
                str+=arr[i];
            }
        }
        return str;

    }
    static void swap(char[] arr,int l,int r){
        char temp;
        while (l<r){
            temp=arr[r];
            arr[r]=arr[l];
            arr[l]=temp;
            l++;
            r--;
        }
    }
    /******************************结束写代码******************************/


    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String res;

        String _expr;
        try {
            _expr = in.nextLine();
        } catch (Exception e) {
            _expr = null;
        }

        res = resolve(_expr);
        System.out.println(res);
    }
}

#携程##笔试题目#
全部评论
楼主能解释下2题的思路吗看的有点懵
点赞 回复 分享
发布于 2019-09-04 22:25

相关推荐

评论
1
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务