首页 > 试题广场 >

【编程题】给定数组,任意相邻两个元素的差的绝对值为1,设计一

[问答题]
【编程题】给定数组,任意相邻两个元素的差的绝对值为1,设计一个算法,在该数组中可以查找某个元素的位置,如果该元素的值多次出现,返回第一次的位置。例如{4, 5, 6, 5, 6, 7, 8, 9, 10, 9}元素9出现了两次,第一次出现的位置7
public class Test4 {
    public static int findFirst(int[] a,int key){
        int index = 0;
        while (a[index]<=key) {
            if (a[index] == key) {
                return index;
            }
            index += key - a[index];
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] a = {4, 5, 6, 5, 6, 7, 8, 9, 10, 9};
        System.out.println(findFirst(a,5));
    }
}

发表于 2020-10-14 10:57:20 回复(0)
public class weiz2 {
    public static void main(String[] args){
        int[] a={4, 5, 6, 5, 6, 7, 8, 9, 10, 9};
        StringBuffer str = new StringBuffer();
        for(Integer s:a){
            str.append(s);
        }
        System.out.println(str.indexOf("6"));
    }
}

发表于 2019-08-19 16:19:53 回复(1)
//在原数组中进行从前往后遍历,找到最后一个下标,从后往前遍历找到第一个下标,如果不等,则查找成功。
#include<iostream>
using namespace std;
int prefind(int arr[],int len,int val)
{
int prepos=0;
for(int i=len-1;i>=0;i--)
    {
          if(arr[i]==val)
         prepos=i;
   }
 return prepos;
}
int rearfind(int arr[],int len,int val)
{
int rearpos=0;
for(int i=0;i<len;i++)
   {
          if(arr[i]==val)
          rearpos=i;
    }
return rearpos;
}
int main()
{
int arr[]={4,5,6,5,6,7,8,9,10,9}; 
int val=9;
if(prefind(arr,sizeof(arr),val)<rearfind(arr,sizeof(arr),val))
{  cout<<pos1<<endl;   } 
return 0;
}
发表于 2020-07-23 09:15:54 回复(0)