Check If N and Its Double Exist(C++ 檢查整數及其兩倍數是否存在)

解題思路:

(1)先排序,時間複雜度nlogn,再獲得正負數的分水嶺,index

(2)對正負數區間分別討論,利用遞增的性質,優化i,j的移動

class Solution {
public:
    bool checkIfExist(vector<int>& arr) {
        sort(arr.begin(),arr.end());
	int index=0;
	for(int k=0;k<arr.size();k++) {
	    if(arr[k]>=0) {
		index = k;
		break;
	    }
	}
	//cout<<index<<endl;
	//非負數部分
	int i=index,j=i+1;
	while(i<arr.size()&&j<arr.size()) {
	    if(2*arr[i]>arr[j]) j++;
	    else if(2*arr[i]==arr[j]) return true;
	    else i++;
	}
	//負數部分
	i=index-1,j=i-1;
	while(i>=0&&j>=0) {
	    if(2*arr[i]<arr[j]) j--;
	    else if(2*arr[i]==arr[j]) return true;
	    else i--;
	}
	return false;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章