给定一个整数数组,我需要返回一个包含原始数组中间元素的新数组。具体来说,如果原始数组的长度是奇数,则结果将具有一个元素,如果它是偶数,则结果将具有两个元素。
这是我现在的代码,适用于偶数长度的数组。如何使它适用于奇数长度的数组?
public int[] makeMiddle(int[] nums) {
int[] a = new int[2];
if(nums.length>1) {
a[1]=nums[nums.length/2];
a[0]=nums[nums.length/2-1];
return a;
} else {
a[2]=nums[((nums.length+1)/2) -1];
}
return a;
}
答案 0 :(得分:11)
int mid = firstIndex + (lastIndex-firstIndex)/2
,会给你数组的中间部分。
答案 1 :(得分:5)
试试这段代码:
public int[] makeMiddle(int[] nums) {
int[] a;
if (nums.length %2 == 0) {
// even-length array (two middle elements)
a = new int[2];
a[0] = nums[(nums.length/2) - 1];
a[1] = nums[nums.length/2];
} else {
// odd-length array (only one middle element)
a = new int[1];
a[0] = nums[nums.length/2];
}
return a;
}
在原始代码中,您没有检查nums
的长度是偶数还是奇数。
答案 2 :(得分:2)
略微通用的解决方案:
public static int[] midArray(int[] arr) {
int extra = arr.length % 2 == 0? 1 : 0;
int[] a = new int[1 + extra];
int startIndex = arr.length / 2 - extra;
int endIndex = arr.length / 2;
for (int i = 0; i <= endIndex - startIndex; i++) {
a[i] = arr[startIndex + i];
}
return a;
}
试运行:
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3, 4};
int[] b = new int[]{1, 2, 3};
int[] c = new int[]{1, 2};
int[] d = new int[]{1};
System.out.println(Arrays.toString(midArray(a)));
System.out.println(Arrays.toString(midArray(b)));
System.out.println(Arrays.toString(midArray(c)));
System.out.println(Arrays.toString(midArray(d)));
}
输出:
[2, 3]
[2]
[1, 2]
[1]
答案 3 :(得分:1)
我正在查看Java Array文档,发现了这一点。这是获得数组中间值的完美解决方案。
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => Future.value(false), // disabling back press
child: Scaffold(
appBar: AppBar(title: Text("Back button")),
body: Center(
child: Column(
children: <Widget>[
RaisedButton(onPressed: () => Navigator.of(context).pop), // won't allow back press
RaisedButton(onPressed: () => Navigator.pop(context)), // allows back press
],
),
),
),
);
}
答案 4 :(得分:1)
element.all(by.css('.items li')).filter(function(elem, index) {
return elem.getText().then(function(text) {
return text === 'Third';
});
优于 start + (end - start) / 2
。如果使用(start + end) / 2
,start+end的求和结果大于整数最大值,会导致溢出。
(start + end) / 2
答案 5 :(得分:0)
我看过:
Integer midElement(int[] ary, int start, int end) {
if (start < end) {
return null;
}
int mid = (start + end)/2;
return ary[mid];
以上内容适用于任何 start
索引和任何 end
索引。它甚至检查无效输入是否没有通过。 Cracking The Coding Interview
书在本书的各个相关问题中都采用了这种方法
答案 6 :(得分:0)
import org.apache.spark.sql.Row
val irm = new IndexedRowMatrix(transformed.rdd.map {
Row(_, v: org.apache.spark.ml.linalg.Vector) =>
org.apache.spark.mllib.linalg.Vectors.fromML(v)
}.zipWithIndex.map { case (v, i) => IndexedRow(i, v) })
<console>:5: error: not a legal formal parameter.
Note: Tuples cannot be directly destructured in method or function parameters.
Either create a single parameter accepting the Tuple1,
or consider a pattern matching anonymous function: `{ case (param1, param1) => ... }
Row(_, v: org.apache.spark.ml.linalg.Vector) =>
^
答案 7 :(得分:0)
int arr[] = {10, 11, 12, 13, 15, 18, 20};
int num = (arr.length) / 2;
if (num % 2 == 0) {
for (int i = (num - 1); i <= num; i++) {
System.out.println(arr[i]);
}
} else {
System.out.println(arr[num]);
}