牛客網刷題目——20200705

簡明題意:

我們定義一個整數可重集合是好的,當且僅當對於集合中任意兩個元素 a, b (a≤ba \leq ba≤b) ,所有滿足 a≤c≤ba\leq c\leq ba≤c≤b 的元素 c 都在集合中出現過。

現在,給你一個數組 mSet,你需要做的是,對於這個數組的每一個前綴,判斷這個前綴是不是一個好的集合。所以,你將計算出的是一個數組,爲布爾類型。

輸入

[3,5,4,6]

輸出

[true,false,true,true]

說明

第一個前綴只有一個元素3,按照好的集合的定義,它顯然是連續的。

第二個前綴有一個3和一個5,位於3和5之間的元素4卻不在集合中,所以它不是連續的。

第三個前綴添加了一個4,彌補了第二個集合缺少4的問題,所以它是好的。

第四個前綴新增了一個6,依舊連續。

/**
 * Copyright (C), 2018-2020
 * FileName: continuousSet
 * Author:   xjl
 * Date:     2020/7/5 16:44
 * Description: 排序算法
 */
package Sort;

import org.junit.Test;

import java.util.*;

public class continuousSet {
    //通過率64
    public boolean[] continuousSet(int[] mSet) {
        //返回的結果
        boolean[] result = new boolean[mSet.length];
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < mSet.length; i++) {
            //添加元素
            list.add(mSet[i]);
            //選擇第一個
            int start = Collections.min(list);
            int end = Collections.max(list);
            int flag = 0;
            //檢查是否有序
            while (start <= end) {
                if (!list.contains(start)) {
                    flag = 1;
                    break;
                } else {
                    start++;
                }
            }
            if (flag == 1) {
                result[i] = false;
            } else {
                result[i] = true;
            }
        }
        return result;
    }
    //通過率72%
    public boolean[] continuousSet2(int[] mSet) {
        //返回的結果
        boolean[] result = new boolean[mSet.length];
        TreeSet<Integer> set = new TreeSet<>();
        for (int i = 0; i < mSet.length; i++) {
            //添加元素
            set.add(mSet[i]);
            //選擇第一個
            int start = set.first();
            int end = set.last();
            int flag = 0;
            //檢查是否有序
            while (start <= end) {
                if (!set.contains(start)) {
                    flag = 1;
                    break;
                } else {
                    start++;
                }
            }
            if (flag == 1) {
                result[i] = false;
            } else {
                result[i] = true;
            }
        }
        return result;
    }
    //通過率100%
    public boolean[] continuousSet3 (int[] mSet) {
        // write code here
        boolean[] res=new boolean[mSet.length];
        if(mSet.length==0) return res;

        Set<Integer> set=new HashSet<>();
        int min=mSet[0];
        int max=mSet[0];
        for(int i=0;i<mSet.length;i++){
            max=Math.max(max,mSet[i]);
            min=Math.min(min,mSet[i]);
            if(set.add(mSet[i])){
                res[i]=(max-min+1==set.size());
            }else{
                res[i]=res[i-1];
            }
        }
        return res;
    }
    @Test
    public void test() {

        int[] array = {2, 1, 0, 4, 1, 0, 3, 4, 0, 2};

        boolean[] booleans = continuousSet2(array);

        for (int i = 0; i < booleans.length; i++) {
            System.out.println(booleans[i]);
        }
    }
}

扔骰子

題意:

牛妹在和牛牛玩扔骰子,他們的遊戲規則有所不同;
每個人可以扔nnn次mmm面骰子,來獲得nnn個數
得分爲任意選取nnn個數中的某些數求和所不能得到的最小的正整數
得分大的人獲勝
例如扔骰子333次得到了 1 11 222 55 5,那麼這個人的得分是444

牛妹想知道這回合她是否能贏

牛妹的n個數存在數組a中,牛牛的n個數存在數組b中

數組下標從0開始

輸入:

n,m與數組a,b

1≤n≤2∗1051 \leq n\leq 2*10^{5} 1≤n≤2∗105

1≤m≤1091 \leq m\leq 10^{9} 1≤m≤109

1≤a[i]≤m1 \leq a[i] \leq m1≤a[i]≤m

1≤b[i]≤m1 \leq b[i] \leq m1≤b[i]≤m

輸出:

如果牛妹能在這回合勝利則輸出HappyHappyHappy,否則輸出SadSadSad

示例1

輸入

2,4,[1,2],[1,3]

輸出

"Happy"
import java.util.*;

public class Solution {
    /**
     * 
     * @param n int整型 n
     * @param m int整型 m
     * @param a int整型一維數組 a
     * @param b int整型一維數組 b
     * @return string字符串
     */
    public String Throwdice (int n, int m, int[] a, int[] b) {
        // write code here
         Arrays.sort(a);
        Arrays.sort(b);
        long a1 = Num(a, n);
        long b1 = Num(b, n);
        return a1 > b1 ? "Happy" : "Sad";
    }
    
     public long Num(int[] t, int n) {
        long num = 0;
        for (int i = 0; i < n; i++) {
            if (t[i] > num + 1){
                break;
            }
            num += t[i];
        }
        return num;
    }
    
}

在這個特殊的假期裏,由於牛牛在家特別無聊,於是他發明了一個小遊戲,遊戲規則爲:將字符串數字中爲偶數位的數字進行翻轉,將翻轉後的結果進行輸出。

import java.util.*;


public class Solution {
    /**
     * 
     * @param number string字符串 
     * @return string字符串
     */
    public String change (String number) {
        if(number == null || number.length() == 0 || number.length() > Math.pow(10,7)){
            return number;
        }
        char[] temp = number.toCharArray();
        int left = 0;
        int right = temp.length - 1;

        while(left < right){
            if(temp[left]%2!=0){
                left++;
                continue;
            }
            if(temp[right]%2!=0){
                right--;
                continue;
            }
            
            char tempNum = temp[left];
            temp[left] = temp[right];
            temp[right] = tempNum;
            left++;
            right--;
        }
        return String.valueOf(temp);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章