簡明題意:
我們定義一個整數可重集合是好的,當且僅當對於集合中任意兩個元素 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);
}
}