zoukankan      html  css  js  c++  java
  • 第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;
        }
    }
    

    第四题:待补充

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/realzhaijiayu/p/13549283.html
Copyright © 2011-2022 走看看