• 第203场周赛


    第一题:圆形赛道上经过次数最多的扇区

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    class Solution {
        public List<Integer> mostVisited(int n, int[] rounds) {
            List<Integer> res = new ArrayList<>();
            int[] nums = new int[n + 1];//经过扇区的次数
            //不要用 0 存储
            for(int i = 1; i < rounds.length; i++){
                while(rounds[i-1] != rounds[i]){
                    nums[rounds[i-1]]++;
                    rounds[i-1]++;
                    if(rounds[i-1] > n){
                        rounds[i-1] = 1;
                    }
                }
            }
    
            nums[rounds[rounds.length - 1]]++;
    
            int maxNum = Integer.MIN_VALUE;
            for(int i = 1; i < nums.length; i++){
                if(nums[i] > maxNum){
                    maxNum = nums[i];
                }
            }
    
            for(int i = 1; i < nums.length; i++){
                if(nums[i] == maxNum){
                    res.add(i);
                }
            }
            return res;
        }
    }
    

    第二题:你可以获得的最大硬币数量

    import java.util.Arrays;
    
    class Solution {
        public int maxCoins(int[] piles) {
            Arrays.sort(piles);
            int sum = 0;
            int count = piles.length / 3;
            for(int i = piles.length - 2; i > 0 && count > 0; i -= 2){
                sum += piles[i];
                count--;
            }
            return sum;
        }
    }
    

    第三题:查找大小为M的最新分组

    逆着想,数组从右向左遍历,找到第一个“1”的个数是 m 的分组立即返回。初始值全为 1,只要遍历到,就会变成 0。

    import java.util.TreeSet;
    
    class Solution {
        public int findLatestStep(int[] arr, int m) {
            TreeSet<Integer> ts = new TreeSet<>();
            ts.add(0);
            ts.add(arr.length + 1);
            if(m == arr.length){
                return arr.length;
            }
            for(int i = arr.length - 1;  i > 0; i--){
                int index = arr[i];
                int front = ts.lower(index);
                int end = ts.higher(index);
                if(index - front - 1 == m || end - index - 1 == m){
                    return i;
                }
                ts.add(index);
            }
            return -1;
        }
    }
    

    第四题:待补充

  • 相关阅读:
    CEAC认证
    CEAC认证
    java 和.net 开发平台的感受(菜鸟级)
    NBA现场直播在线看
    NBA现场直播在线看
    CEAC认证
    NBA现场直播在线看
    NBA现场直播在线看
    选择冒泡排序
    折半查找法
  • 原文地址:https://www.cnblogs.com/realzhaijiayu/p/13549283.html
Copyright © 2020-2023  润新知