我的解决方案有什么问题?帮助我改进它或任何其他解决方案?
what is wrong in my solution? help me to impove it or any other solution?
一个教室有几个学生,一半是男生,一半是女生。早会需要将他们排成一排,满足以下条件:
同学们一定要按照身高不递减的顺序。
两个男孩或两个女孩不能相邻。
你已经得到数组中男孩的身高和数组中女孩的身高。看看你是否可以按满足给定条件的顺序排列它们。如果可能,打印 "YES",如果不可能,则打印 "NO"。
这是我的,但我在 3 个测试用例中得到了错误的答案。
在这里,a 是男孩身高的数组,b 是女孩的数组。
a=sorted(a)
b=sorted(b)
i=0
n=len(a)
j=0
x=""
while i<n and j<n:
if a[i]<b[j]:
x+="b"
i+=1
elif a[i]==b[j]:
if len(x)==0:
x+="b"
i+=1
elif x[-1]=="b":
x+="g"
j+=1
else:
x+="b"
i+=1
else:
x+="g"
j+=1
while i<n:
x+="b"
i+=1
while j<n:
x+="g"
j+=1
p=re.findall(r"[g]{2,}(?=[b]{2})",x)
q=re.findall(r"[b]{2,}(?=[g]{2})",x)
if q or p:
return "NO"
else:
return "YES"
这是我的,只有 1 个测试用例失败,其中
a = [32, 2]
b = [28, 37]
解法:
function arrangeStudents(a, b) {
const result = []
let i = 0;
let j = 0;
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
if (i > 0 && j > 0 && a[i - 1] !== b[j - 1] && result[result.length - 1] == a[i - 1]) {
return 'NO'
}else if (j == 0 && i > 0 && result[result.length - 1] == a[i - 1]){
return 'NO'
}else {
result.push(a[i])
}
i++
}else if(a[i] > b[j]) {
if (i > 0 && j > 0 && a[i - 1] !== b[j - 1] && result[result.length - 1] == b[j - 1]) {
return 'NO'
}else if (i == 0 && j > 0 && result[result.length - 1] == b[j - 1]){
return 'NO'
}else {
result.push(b[j])
}
j++;
}else {
if (i > 0 && result[result.length - 1] == a[i -1]) {
result.push(b[j], a[i])
}else {
result.push(a[i], b[j])
}
i++
j++
}
}
return 'YES'
}
我看到了你的代码。所以错误在你检查 2 个男孩和 2 个女孩的部分。
你写的条件是:
p=re.findall(r"[g]{2,}(?=[b]{2})",x)
q=re.findall(r"[b]{2,}(?=[g]{2})",x)
请注意,'?=' 是前瞻性的,这意味着只有当您有 2 个女孩之前有 2 个男孩或有 2 个男孩之前有 2 个女孩时,它才会给出 true。当字符串为 -> GBBG 或 BGGB 或 GBBGBG 或 BGGBGB
时,此逻辑将失败
我建议改用标志系统,因为您只需要跟踪行中的最后一个条目。让男孩的标志为“0”,女孩的标志为“1”
flag=2
success = "Yes";
while i<n and j<n:
if(a[i]<b[j]):
if(flag==2):
flag = 0
elif(flag == 0):
success="No"
break;
else:
flag=0
elif(a[i]==b[j])
if(flag==2):
flag=0
elif(flag==0):
flag=1
else:
flag=0
else:
if(flag==2):
flag=1
elif(flag==1):
success="No"
break;
else:
flag=1
print(success)
a=sorted(a)
b=sorted(b)
i=0
flag=0
n=len(a)
j=0
x=""
while i<n and j<n:
if a[i]<b[j]:
x+="b"
i+=1
elif a[i]==b[j]:
if len(x)==0:
x+="b"
flag=1
i+=1
elif x[-1]=="b":
x+="g"
j+=1
else:
x+="b"
i+=1
else:
x+="g"
j+=1
while i<n:
x+="b"
i+=1
while j<n:
x+="g"
j+=1
w=re.findall(r"[b]{2}",x)
t=re.findall(r"[g]{2}",x)
if (w or t) and flag==1:
i=0
n=len(a)
j=0
x=""
while i<n and j<n:
if a[i]<b[j]:
x+="b"
i+=1
elif a[i]==b[j]:
if len(x)==0:
x+="g"
j+=1
elif x[-1]=="b":
x+="g"
j+=1
else:
x+="b"
i+=1
else:
x+="g"
j+=1
while i<n:
x+="b"
i+=1
while j<n:
x+="g"
j+=1
w=re.findall(r"[b]{2}",x)
t=re.findall(r"[g]{2}",x)
if w or t:
return "NO"
else:
return 'YES'
elif w or t:
return "NO"
else:
return "YES"
一个教室有几个学生,一半是男生,一半是女生。早会需要将他们排成一排,满足以下条件:
同学们一定要按照身高不递减的顺序。 两个男孩或两个女孩不能相邻。 你已经得到数组中男孩的身高和数组中女孩的身高。看看你是否可以按满足给定条件的顺序排列它们。如果可能,打印 "YES",如果不可能,则打印 "NO"。 这是我的,但我在 3 个测试用例中得到了错误的答案。 在这里,a 是男孩身高的数组,b 是女孩的数组。
a=sorted(a)
b=sorted(b)
i=0
n=len(a)
j=0
x=""
while i<n and j<n:
if a[i]<b[j]:
x+="b"
i+=1
elif a[i]==b[j]:
if len(x)==0:
x+="b"
i+=1
elif x[-1]=="b":
x+="g"
j+=1
else:
x+="b"
i+=1
else:
x+="g"
j+=1
while i<n:
x+="b"
i+=1
while j<n:
x+="g"
j+=1
p=re.findall(r"[g]{2,}(?=[b]{2})",x)
q=re.findall(r"[b]{2,}(?=[g]{2})",x)
if q or p:
return "NO"
else:
return "YES"
这是我的,只有 1 个测试用例失败,其中
a = [32, 2]
b = [28, 37]
解法:
function arrangeStudents(a, b) {
const result = []
let i = 0;
let j = 0;
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
if (i > 0 && j > 0 && a[i - 1] !== b[j - 1] && result[result.length - 1] == a[i - 1]) {
return 'NO'
}else if (j == 0 && i > 0 && result[result.length - 1] == a[i - 1]){
return 'NO'
}else {
result.push(a[i])
}
i++
}else if(a[i] > b[j]) {
if (i > 0 && j > 0 && a[i - 1] !== b[j - 1] && result[result.length - 1] == b[j - 1]) {
return 'NO'
}else if (i == 0 && j > 0 && result[result.length - 1] == b[j - 1]){
return 'NO'
}else {
result.push(b[j])
}
j++;
}else {
if (i > 0 && result[result.length - 1] == a[i -1]) {
result.push(b[j], a[i])
}else {
result.push(a[i], b[j])
}
i++
j++
}
}
return 'YES'
}
我看到了你的代码。所以错误在你检查 2 个男孩和 2 个女孩的部分。
你写的条件是:
p=re.findall(r"[g]{2,}(?=[b]{2})",x)
q=re.findall(r"[b]{2,}(?=[g]{2})",x)
请注意,'?=' 是前瞻性的,这意味着只有当您有 2 个女孩之前有 2 个男孩或有 2 个男孩之前有 2 个女孩时,它才会给出 true。当字符串为 -> GBBG 或 BGGB 或 GBBGBG 或 BGGBGB
时,此逻辑将失败我建议改用标志系统,因为您只需要跟踪行中的最后一个条目。让男孩的标志为“0”,女孩的标志为“1”
flag=2
success = "Yes";
while i<n and j<n:
if(a[i]<b[j]):
if(flag==2):
flag = 0
elif(flag == 0):
success="No"
break;
else:
flag=0
elif(a[i]==b[j])
if(flag==2):
flag=0
elif(flag==0):
flag=1
else:
flag=0
else:
if(flag==2):
flag=1
elif(flag==1):
success="No"
break;
else:
flag=1
print(success)
a=sorted(a)
b=sorted(b)
i=0
flag=0
n=len(a)
j=0
x=""
while i<n and j<n:
if a[i]<b[j]:
x+="b"
i+=1
elif a[i]==b[j]:
if len(x)==0:
x+="b"
flag=1
i+=1
elif x[-1]=="b":
x+="g"
j+=1
else:
x+="b"
i+=1
else:
x+="g"
j+=1
while i<n:
x+="b"
i+=1
while j<n:
x+="g"
j+=1
w=re.findall(r"[b]{2}",x)
t=re.findall(r"[g]{2}",x)
if (w or t) and flag==1:
i=0
n=len(a)
j=0
x=""
while i<n and j<n:
if a[i]<b[j]:
x+="b"
i+=1
elif a[i]==b[j]:
if len(x)==0:
x+="g"
j+=1
elif x[-1]=="b":
x+="g"
j+=1
else:
x+="b"
i+=1
else:
x+="g"
j+=1
while i<n:
x+="b"
i+=1
while j<n:
x+="g"
j+=1
w=re.findall(r"[b]{2}",x)
t=re.findall(r"[g]{2}",x)
if w or t:
return "NO"
else:
return 'YES'
elif w or t:
return "NO"
else:
return "YES"