如果一个数组包含两个或多个非零元素,并且正好有n个零分隔所有相邻的非零元素(如果删除零),则该数组被定义为n-zero-packed。例如,数组{1,0,0,18,0,0,-8,0,0}是2-零 Package 的,因为1和18之间有两个零,18和-8之间有两个零,这说明了所有非零元素。数组{0,1,0,0,0,6,0,8,0,0,4}不是2-zero-packed,因为1和6之间有三个零,6和8之间只有一个零编写一个名为isNZeroPacked的函数,并使用以下签名boolean isNZeroPacked(int[] a,int n)如果函数的数组参数是n-zero-packed(注意,n作为函数的参数之一传递),则函数返回true
示例
1.{0,0,0,2,0,2,0,2,0,0} n= 1 ans => True|| 1;因为正好1个零分隔数组的所有非零元素
1.{12,0,0,0,0,0,0,-8} n=7 ans= true||因为正好有7个零分隔数组的所有非零元素
1.{0,0,0,0,5,0,0,4,0,0,6} n=2 ans = true||因为正好有2个零分隔数组的所有非零元素
1.{0,0,0,0,5,0,0,4,0,0,0,6} n=2 ans = false||因为4和6之间有三个零。
1.{0,0,0,0,5,0,4,0,0,6} n=2 ans= false||因为5和4之间只有一个0。
1.{0,0,0,0} n=3 ans= false 0,因为数组必须至少有两个非零元素
1.{0,0,1,0,0} n=2 ans= false|| 0,因为数组必须至少有两个非零元素
注意:数组开头和结尾的零应该被忽略。我的解决方案在这里,任何更短和更简单的代码都是值得的
private static boolean isNzeroPack(int[] arr, int n) {
boolean firstIf = false;
boolean secondIf = false;
boolean satisfied=false;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
for (int j = i, k = 1; j < arr.length; k++, j++) {
if (i - k >= 0 && !firstIf && arr[i - k] != 0) {
if (j - i != n) {
return false;
} else {
firstIf = true;
}
}
if (((j + 1) < arr.length) && !secondIf && (arr[j + 1] != 0)) {
if (j - i != n) {
return false;
} else {
secondIf = true;
}
}
}
satisfied = true;
}
firstIf = false;
secondIf = false;
}
return satisfied;
}
字符串
2条答案
按热度按时间vuktfyat1#
我使用正则表达式处理了一些可能的解决方案:
1.获取数组的String表示:
出发地:
{ 0 , 0 , 0 , 2 , 0 , 2 , 0 , 2 , 0 , 0 };
至:
0002020200
1.从字符串中删除前导零和尾随零。
所以,到目前为止,我们有:
20202
1.现在你必须选择:
3.1.如果结果字符串长度< 2
return false
。这符合两个非零元素的要求。3.2.如果>= 2,则返回与regex
^(((-*)[1-9]+)([0]{" + n + "})+)+((-*)[1-9]+)$
匹配的结果(根据具体情况,它可能为true或false)。正则表达式匹配任何数量的数字(包括负数),它们之间由n个零分隔。
实现方式:
这个实现从你的问题中获取输入(你可以进一步测试它),并在前面的伪算法评估后返回true或false。我还打印了当前字符串(来自步骤2)以供参考。
主程序:
字符串
输出:
型
**注意:**输出中有一个空行(这是预期的)。
希望对你有帮助:)
cl25kdpy2#
public int findDuplicate(int[] nums){
字符串