您的位置:首页 > 其它

LeetCode(35) Search Insert Position

2015-07-22 10:33 330 查看
递归版本 8ms

[code]class Solution {
public:

    void search(vector<int> &nums, int index1, int index2, int target, int &index, bool &doHave) {

        if(index1 > index2)

            return;

        if(index1 == index2) {

            if(nums[index1] == target) {

                doHave = true;
                index = index1;

            }

            return;

        }

        int mid = index1 + (index2 - index1) / 2;
        if(nums[mid] == target) {

            doHave = true;
            index = mid;

            return;
        }

        if(nums[mid] > target)

            search(nums, index1, mid - 1, target, index, doHave);

        if(nums[mid] < target)

            search(nums, mid + 1, index2, target, index, doHave);
    }

    int searchInsert(vector<int>& nums, int target) {
        int index;
        bool doHave = false;

        search(nums, 0, nums.size() - 1, target, index, doHave);

        if(doHave == false) {

            int i = 0;
            for(; i < nums.size(); )
                if(nums[i] < target)

                    i++;

                else

                    break;

            return i;        

        }

        return index;

    }
};


迭代版本 8ms

[code]class Solution {
public:

    void search(vector<int> &nums, int index1, int index2, int target, int &index, bool &doHave) {

        if(index1 > index2)

            return;

        if(index1 == index2) {

            if(nums[index1] == target) {

                doHave = true;
                index = index1;

            }

            return;

        }

        int mid = index1 + (index2 - index1) / 2;
        if(nums[mid] == target) {

            doHave = true;
            index = mid;

            return;
        }

        if(nums[mid] > target)

            search(nums, index1, mid - 1, target, index, doHave);

        if(nums[mid] < target)

            search(nums, mid + 1, index2, target, index, doHave);
    }

    int searchInsert(vector<int>& nums, int target) {
        int index;
        bool doHave = false;

        //search(nums, 0, nums.size() - 1, target, index, doHave);

        int index1 = 0;
        int index2 = nums.size() - 1;

        while(index1 <= index2) {

            int mid = index1 + (index2 - index1) / 2;

            if(nums[mid] == target) {
                doHave = true;
                index = mid;
                break;
            }

             if(nums[mid] > target) {

                index2 = mid - 1;
                continue;
            }

            if(nums[mid] < target) {

                index1 = mid + 1;
                continue;

            }

        }

        if(doHave == false) {

            int i = 0;
            for(; i < nums.size(); )
                if(nums[i] < target)

                    i++;

                else

                    break;

            return i;        

        }

        return index;

    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: