From ef126667a5c0da7a1a00ef13e2fe8bb5b071979e Mon Sep 17 00:00:00 2001 From: KongJHong Date: Fri, 26 Oct 2018 18:11:34 +0800 Subject: [PATCH 1/2] Add Solution 035[CPP] --- solution/035.Search Insert Position/README.md | 71 +++++++++++++++++++ .../035.Search Insert Position/Solution.cpp | 65 +++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 solution/035.Search Insert Position/Solution.cpp diff --git a/solution/035.Search Insert Position/README.md b/solution/035.Search Insert Position/README.md index 919efc7570a09..85a78dea201f9 100644 --- a/solution/035.Search Insert Position/README.md +++ b/solution/035.Search Insert Position/README.md @@ -90,3 +90,74 @@ class Solution { } } ``` + +#### CPP + +```CPP +class Solution { +public: + int searchInsert(vector& nums, int target) { + int len = nums.size(); + if(len == 0){ + nums.push_back(target); + return 0; + } + + auto iter = find(nums.begin(),nums.end(),target); + + if(iter != nums.end()){ + return binarySearch(nums,0,len - 1,target); + } + else{ + int slow = 0; + int fast = 1; + + if(nums[0] >= target)return 0; + if(nums[len-1] <= target)return len; + + while(fast < len){ + if(nums[slow] <= target && nums[fast] > target){ + nums.insert(nums.begin() + fast,target); + return fast; + } + else{ + slow++; + fast++; + } + } + return fast; + } + } + + + int binarySearch(vector &nums,int left,int right,int target){ + if(nums[left] == target)return left; + if(nums[right] == target)return right; + + int mid = (left + right) / 2; + + if(nums[mid] > target)return binarySearch(nums,left+1,mid,target); + else if(nums[mid] < target)return binarySearch(nums,mid,right-1,target); + else return mid; + } + +}; + +------------------------- +class Solution { +public: + int searchInsert(vector& nums, int target) { + if (nums.size() == 0) { + nums.push_back(target); + return 0; + } + unsigned int i = 0; + + while(i& nums, int target) { + int len = nums.size(); + if(len == 0){ + nums.push_back(target); + return 0; + } + + auto iter = find(nums.begin(),nums.end(),target); + + if(iter != nums.end()){ + return binarySearch(nums,0,len - 1,target); + } + else{ + int slow = 0; + int fast = 1; + + if(nums[0] >= target)return 0; + if(nums[len-1] <= target)return len; + + while(fast < len){ + if(nums[slow] <= target && nums[fast] > target){ + nums.insert(nums.begin() + fast,target); + return fast; + } + else{ + slow++; + fast++; + } + } + return fast; + } + } + + + int binarySearch(vector &nums,int left,int right,int target){ + if(nums[left] == target)return left; + if(nums[right] == target)return right; + + int mid = (left + right) / 2; + + if(nums[mid] > target)return binarySearch(nums,left+1,mid,target); + else if(nums[mid] < target)return binarySearch(nums,mid,right-1,target); + else return mid; + } + +}; + +------------------------- +class Solution { +public: + int searchInsert(vector& nums, int target) { + if (nums.size() == 0) { + nums.push_back(target); + return 0; + } + unsigned int i = 0; + + while(i Date: Fri, 26 Oct 2018 18:14:51 +0800 Subject: [PATCH 2/2] Add Solution 035[CPP] --- solution/035.Search Insert Position/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/solution/035.Search Insert Position/README.md b/solution/035.Search Insert Position/README.md index 85a78dea201f9..cbaae852b448d 100644 --- a/solution/035.Search Insert Position/README.md +++ b/solution/035.Search Insert Position/README.md @@ -38,6 +38,7 @@ 除此之外还可用二分法做解。 + ```java class Solution { public int searchInsert(int[] nums, int target) { @@ -93,6 +94,19 @@ class Solution { #### CPP +思路1: + +1. 先调函数查找是否存在target元素 +2. 若存在,用二分法进行查找,或者顺序遍历 +3. 若不存在,则顺序遍历插入 + +时间复杂度O(log2(n))~O(n) + +思路2: + 1. 直接顺序遍历---需要点取巧,下标比nums长度小,nums[p]元素要比targat小 + + 时间复杂度O(n) + ```CPP class Solution { public: