第 267 场周赛

111 阅读1分钟

第 267 场周赛

No.1 2703.买票需要的时间

链接

2073_1.png

  1. 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;
}
  1. 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.买票需要的时间

2074_1.png

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; }
}
  1. 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;
}
  1. 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;
}

No.3 2075. 解码斜向换位密码

2705.png

No.4 2076. 处理含限制条件的好友请求

2076.png