Easy_01

作者: 逃避虽可耻 | 来源:发表于2020-02-10 15:43 被阅读0次

两数之和

想法一:最直接的暴力解法。通过两层嵌套循环对数组进行遍历。

 vector<int> twoSum(vector<int>& nums, int target) {

        vector<int> index;

        for(int i = 0;i < nums.size() - 1; ++i){

            int num_i = nums[i];

            for (int j = i + 1; j < nums.size();++j){

                int num_j = nums[j];

                if (num_i + num_j == target){

                    index.push_back(i);

                    index.push_back(j);

                    return index;  

                }

            }

        }

        return index;

    }

结果

简单明了直接通过,但结果并不是很好。

解法二:创建一个辅助数组用于排序。利用有序的数组做差在原来的数组寻找查找对应的下标。

 vector<int> twoSum(vector<int>& nums, int target) {

        vector<int> index;

        vector<int> temp_nums(nums.begin(),nums.end());

sort(temp_nums.begin(),temp_nums.end()); 

for (vector<int>::iterator it = temp_nums.begin();it != temp_nums.end();++it){

    int gap = target - *it;

        vector<int>::iterator index_itr1 = find(nums.begin(),nums.end(),*it);

        int temp = *index_itr1;

        *index_itr1 = target+1; //防止重复的数据产生问题

        vector<int>::iterator index_itr2 = find(nums.begin(),nums.end(),gap);

        if (index_itr2 != nums.end()){

            int index_i = index_itr1 - nums.begin();

            int index_j = index_itr2 - nums.begin();

            index.push_back(index_i);

            index.push_back(index_j); 

            return index;

        }

       *index_itr1 = temp;

}

return index;

}

提交了2次才成功。

第一次出现的问题:数组没考虑到0

第二次出现的问题:数组没考虑到负数情况

从结果可以看出:执行时间提升,但是由于使用了辅助数组,内存的消耗仍然是一个问题

相关文章

  • Easy_01

    两数之和 想法一:最直接的暴力解法。通过两层嵌套循环对数组进行遍历。 vector twoSum(vector &...

网友评论

      本文标题:Easy_01

      本文链接:https://www.haomeiwen.com/subject/lduaxhtx.html