1. 程式人生 > >字串--java面試題, 首個重複字串,二分查詢

字串--java面試題, 首個重複字串,二分查詢

對於一個字串,請設計一個高效演算法,找到第一次重複出現的字元。

給定一個字串(不一定全為字母)A及它的長度n。請返回第一個重複出現的字元。保證字串中有重複字元,字串的長度小於等於500。

測試樣例:
"qywyer23tdd",11
返回:y
public class FirstRepeat {
    public char findFirstRepeat(String A, int n) {
     	int tmp=0;
        char[] ch=A.toCharArray();
        OK:
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                if(ch[j]==ch[i]){
                   tmp=j;
                   break OK;
                }
            }
        }
		return ch[tmp];
    }
}


2.題目描述

對於一個有序陣列,我們通常採用二分查詢的方式來定位某一元素,請編寫二分查詢的演算法,在陣列中查詢指定元素。

給定一個整數陣列A及它的大小n,同時給定要查詢的元素val,請返回它在陣列中的位置(從0開始),若不存在該元素,返回-1。若該元素出現多次,請返回第一次出現的位置。

測試樣例:
[1,3,5,7,9],5,3
返回:1
public class BinarySearch {
    public int getPos(int[] A, int n, int val) {
        // write code here
		int min=0;
		int max=n-1;
		int mid=min+max/2;
		int tmp=-1;
		while(A[mid]!=val && min<=max){
			if(val<A[mid]){
				max=mid-1;
			}else{
				min=mid+1;
			}
			mid=(max+min)/2;
		}
		if(A[mid]==val){
			tmp=mid;
			if(mid>=1){//找第一個相等的值
				while( mid-1>=0 && A[mid-1]==val){
					tmp=mid-1;
					mid--;
				}
			}
			return tmp;
		}else{
			return -1;
		}
    }
}