首先我们知道,索引是访问一个数组中元素的一个重要的数据,倘若我们不知道这个索引,就无法对数组中的元素进行访问,更无法进行使用。因此,面对未知的数组,我们应该学会如何查找索引。
现在我们有一个未知的数组。如下
int [] arr = {11,22,33,44,55};
如果我们只知道这个数组中含有33这个元素,但是并不知道它的索引未知,这时候我就需要去进行索引的查询。
对于这个问题我们已经知道这个数组中存在一个元素33,但是我也不知道这个数组的长度,以及33这个元素对应的索引位置,因此我可以这样设计一个程序。
int sum = -1;
for(int a = 0;a<arr.length;a++){
if(arr[i]!=33){
sum++;
}else if(arr[i]==3){
sum++;
break;
}
System.out.prinln(sum);
}
对于上述的程序,首先定义了一个变量sum,sum起始值为-1,它的作用是用来记录索引为的位置,如果我们想要得到这个索引,我还应该进行,比较数组中的每一个元素与对应查找的元素进行比较,同时利用++算法对sum这个计数器进行增加。最后控制台中打印的结果就是对应的索引。
通过上述方法,我们可能都会发现一个问题,如果我要查找的那个元素在这个数组中含有重复多个呢?是的,对于这个问题我们应该更换一个新的方法进行操作。
由于数组中含有重复元素,这句话的含义应当为,该元素对应的索引存在多个,而对于我们要储存多个同种类型的元素,我们可以采用数组这一个容器进行储存。原始方法还和上述方法相同
思路还是选择一个计数器,然后根据if条件对其进行++计数器。
首先定义了一个数组arr,然后接着再需要定义一个计数器,然后根据if判断条件,可以表述如下
首先得到sum,sum即为该这个数组中该元素的个数,同时也是用来接收索引的数组的长度。
之后再次定义一个索引,然后通过一个计数器把索引存储在数组中。
通过上述两部程序即可完成重复元素的索引查找。
二.双指针交换:
双指针交换是指,由两个指针指向数组中的任意2索引元素,然后然他们向同中间靠拢,指中谁谁就交换。首先根据这个需求我们可以知道,我们需要将指向的的两个索引位置进行比较,首先第一个指针初始位置应当小于第二个指针。同时这两个指针要求分布在数组中心的两侧(题目规定),因此我们可以定义一个变量一个在中间的左边,一个在中间的右边,但同时右边的指针不能够超过最大索引。因此我们可以写下下面的判断
指针的范围确定了我们应让他们进行运转并进行交换,首先促使两个指针向中间靠拢,首先我们可以想到让左边的进行自增,右边的进行自减如下
接者我们不能使这两个指针越界,因此需要满足end>start这个条件
对于如何交换,我们可以设置第三个量
首先这个量记录初始值arr[start],随后arr[start]= arr[end];右边给左边赋值。
最后左边等于最开始设置的第三值,这样我们就完成了双指针交换,全部程序如下图所示!
import java.util.Scanner;
public class ArrTrainsport2 {
public static void main(String []args){
for (;;) {
int[] arr = {11, 22, 33, 44, 55, 66, 77, 88, 99, 100};
int[] result = find(arr);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
public static int[] find(int [] arr){
Scanner tll = new Scanner(System.in);
int start = tll.nextInt();
int end = tll.nextInt();
if(start<arr.length/2&&end>arr.length/2&&end<arr.length){
for(int i = 0;i<arr.length;i++){
int temp= arr[start];
arr[start] = arr[end];
arr[end]=temp;
start++;
end--;
temp= arr[start];
if(start>end){
break;
}
}
}else{
System.out.println("false");
}
return arr;
}