第 267 场周赛
No.1 2703.买票需要的时间
- solve1,模拟方式解决,执行次数
tickets[k] * tickets.length,时间复杂度O(max(tickets[k] , tickets.length)):
public int timeRequiredToBuy(int[] tickets, int k) {
int time = 0;
while (tickets[k] > 0) {
for (int i = 0; i < tickets.length; i++) {
if (tickets[i] > 0) {
tickets[i]--;
time++;
}
if(tickets[k]==0){
break;
}
}
}
return time;
}
- solve2,优化solve1, k之前的大于
tickets[k]再次排队时会插入到位置k的人最后一次排队之前,k 之前的大于tickets[k]再次排队时会插入到位置k的人最后一次排队之后,此时位置k的人已买完离开了.执行次数tickets.length,时间复杂度O(tickets.length):
public int timeRequiredToBuy(int[] tickets, int k) {
int sum = 0;
int count = tickets[k];
for (int i = 0; i < tickets.length; i++) {
if (tickets[i] > count) {
sum += count;
if (i > k) {
sum = -1;
}
} else {
sum += tickets[i];
}
}
return sum;
}
No.2 2074.买票需要的时间
DataStruct
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
- solve1
public ListNode reverseEvenLengthGroups(ListNode head) {
LinkedList<ListNode> list = new LinkedList();
int len = 1;
int cnt = 0;
List<ListNode> tmp = new ArrayList<>();
while (head != null) {
tmp.add(head);
cnt++;
head = head.next;
if (cnt == len) {
if (len % 2 == 0) {
Collections.reverse(tmp);
}
list.addAll(tmp);
tmp = new ArrayList<>();
cnt = 0;
len++;
}
}
if (tmp.size() % 2 == 0) {
Collections.reverse(tmp);
}
list.addAll(tmp);
ListNode node = new ListNode();
ListNode tmpNode = node;
for (ListNode listNode : list) {
tmpNode.next = listNode;
listNode.next = null;
tmpNode = tmpNode.next;
}
return node.next;
}
- solve2
public ListNode reverseEvenLengthGroups(ListNode head) {
LinkedList<ListNode> list = new LinkedList();
List<ListNode> tmp = new ArrayList<>();
for (int len = 1; head != null; ) {
tmp.add(head);
head = head.next;
if (tmp.size() == len || head == null) {
if (tmp.size() % 2 == 0) {
Collections.reverse(tmp);
}
list.addAll(tmp);
tmp.clear();
len++;
}
}
ListNode node = new ListNode();
ListNode tail = node;
for (ListNode listNode : list) {
tail.next = listNode;
listNode.next = null;
tail = tail.next;
}
return node.next;
}