hihocoder58

http://hihocoder.com/contest/offers58/problems
题目1 : 最大的K-偏差排列
遍历从大到小,如果剩下的数满足条件就说明这个数就是当前位置的最佳值


import java.util.Scanner;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt(), k=sc.nextInt();
        int[] res=new int[1+n];
        TreeSet<Integer>left=new TreeSet<Integer>();
        boolean[] vis=new boolean[1+n];
        for(int i=1;i<=n;i++)left.add(i);
        for(int i=1;i<=n;i++) {
            int j=Math.min(i+k, n);
            while(true) {
                while(vis[j]) j--;
                boolean ok=true;
                left.remove(j);
                int q = 0;
                for(int p:left) {
                    if(Math.abs(p-(i+q+1))>k) {
                        ok = false;
                        break;
                    }
                    q ++;
                }
                if(ok) break;
                left.add(j);
                j--;
            }
            res[i]=j;
            vis[j]=true;
            left.remove(j);
        }
        for(int i=1;i<n;i++) System.out.print(res[i]+" ");
        System.out.println(res[n]);
    }
}

题目2 : 孤独的字符
就是不久前的LC contest,focus在每个字符的有效count

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] cs=sc.next().toCharArray();
        int res=0;
        Map<Character, ArrayList<Integer>>m=new HashMap<Character, ArrayList<Integer>>();
        for(int i=0;i<cs.length;i++) {
            if(!m.keySet().contains(cs[i])) {
                ArrayList<Integer> t=new ArrayList<Integer>();
                t.add(-1);
                m.put(cs[i], t);
            }
            m.get(cs[i]).add(i);
        }
        
        for(char c:m.keySet()) m.get(c).add(cs.length);
        
        for(char c:m.keySet()) {
            for(int i=1;i<m.get(c).size()-1; i++) {
                int a=m.get(c).get(i-1),b=m.get(c).get(i),d=m.get(c).get(i+1);
                res += (b-a)*(d-b);
            }
        }
        System.out.println(res);
    }
}

题目3 : 秋天来了
TODO;感觉类似于之前求最多公共interval


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 来自这个兄弟:http://blog.csdn.net/ddd_1206/article/category/685...
    580aa87075d3阅读 1,156评论 0 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 2004年9月,开学季,伴随着新学校的适应,个子娇小、不引人注目的你出现在我的生命中。而我们谁也不曾想过,那样的遇...
    波米小姐阅读 608评论 0 3
  • 在这周的学习会中,我感悟比较深刻的是描绘梦想使人生飞跃这一点,这里我给大家分享一个故事 在美国,有...
    zhaoliping阅读 257评论 0 0