携程笔试思路
第一题:
static ListNode partition(ListNode head,int m) {
//思路:用小链表连接大链表,遍历一遍即可
ListNode small = new ListNode(-1020);
ListNode smallStart = small;
ListNode big = new ListNode(-1020);
ListNode bigStart = big;
while (head != null) {
if(head.val <= m) {
small.next = head;
small = small.next;
} else {
big.next = head;
big = big.next;
}
head = head.next;
}
//把大链表的尾部置为null
big.next = null;
//链接小链表和大链表
small.next = bigStart.next;
return smallStart.next;
} 第二题:
static String resolve(String expr) {
//先检查左右括号个数
int lC = 0 ;
int rC = 0 ;
Stack<Character> stack = new Stack();
char[] chars = expr.toCharArray();
for (int i = 0;i < chars.length;i++) {
if (chars[i] == '(') lC++;
else if(chars[i] == ')')rC++;
}
if(lC != rC) return "";
//利用栈的特性来翻转,如果没遇到)就一直装到栈中,遇到)就一直pop直到把第一个(pop出来,这期间pop出来的字符装到tmp尾部,
//再把tmp字符串按顺序装回栈里即可
String res = "";
for (int i = 0; i < chars.length; i++) {
String tmp = "";
if (chars[i] != ')') {
stack.add(chars[i]);
} else {
if (stack.empty()) return "";
while (stack.peek() != '(') {
tmp += stack.pop();
if (stack.empty()) return "";
}
stack.pop();
for (int j = 0;j < tmp.length(); j++) {
stack.push(tmp.charAt(j));
}
if (i == chars.length-1) {
res = tmp;
}
}
}
return res;
} 只过了71%。。 有点差错找不出来
第三题:
小菜鸡做法:判断特殊情况如果机器数量大于等于任务总数,那么最短时间就是遍历任务后最大的那个任务的时间,这样能拿57%。。。
#携程##笔试题目#
