leetcode -twosum 暴力搜索的實現 、哈希表的實現、二分查找遞歸實現

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。

這題太基本了,先來寫暴力搜索兩個for循環來實現:

class Solution {
public:
	vector<int> twoSum(vector<int>& nums, int target) {
		vector<int>res;//用這個vector存儲最終返回的兩個下標  ,數組爲size型,string爲string::sizetype,vector爲size 
		for (int i = 0; i < nums.size(); i++)
		{
			for (int j = i + 1; i < nums.size(); j++)//這裏是關聯的嵌套for如果用不關聯的會重複搜索
			{
				if (nums[i] + nums[j] == target)
					res[0] = i;
				res[1] = j;
				return res;
			}
		}
		return res;
	}
	};

哈希表::stl裏自帶的map

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> map1;
        for(int i=0;i<nums.size();++i){
            int j=target-nums[i];
            if(map1.find(j)!=map1.end()){
                return vector<int> {map1.find(j)->second,i};
            }else{
                map1[nums[i]]=i;
            }
        }
        return nums;
    }
};

二分查找這裏先來個坑,後面更新:

int erfeng(int left, int right, int target)
{
	if (left < right)
		return -1;
	int mid = (left + right) / 2;
	if (target < mid)
	{
		return erfeng(left + 1, mid, target);
	}
	else
		return erfeng(mid, right - 1, target);
}

在博客編輯的,沒有編譯器,可能會出錯,等填坑的時候來修改

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