704. 二分查詢
題目連結:https://leetcode.cn/problems/binary-search/description/
本人程式碼:
class Solution {
public:
int search(vector<int>& nums, int target) {
int low=0,high=nums.size()-1;//此處分情況討論
return searchTarget(nums,low,high,target);
}
int searchTarget(vector<int>& nums,int low,int high,int target){
while(high>=low){//此處分情況討論
int mid=(low+high)/2;//可作差除以二後加較小數防止溢位
if(nums[mid]==target) {return mid;}
if(nums[mid]>target) {high=mid-1;}//此處分情況討論
if(nums[mid]<target) {low=mid+1;}//此處分情況討論
}
return -1;
}
};
本題左閉右閉區間,另有左閉右開等情況,分情況討論。
27. 移除元素
題目連結:https://leetcode.cn/problems/remove-element/description/
本人程式碼(暴力解法):
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int k=0,n=nums.size();
for(int i=0;i<n;i++){
if(nums[i]==val){
for(int j=i;j<n-1;j++){
nums[j]=nums[j+1];
}
i--;
n--;
}else k++;
}
return k;
}
};
將不含val的陣列元素依次向前移動形成新陣列
雙指標解法(快慢指標):
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow=0;
for(int fast=0;fast<nums.size();fast++){
if(nums[fast]!=val){
nums[slow++]=nums[fast];
}
}
return slow;
}
};
快指標:依次向後尋找不含val的新陣列元素
慢指標:記錄新陣列的下標
977.有序陣列的平方
題目連結:https://leetcode.cn/problems/squares-of-a-sorted-array/
本人程式碼(暴力解法):
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
nums[i]=nums[i]*nums[i];
}
for(int i=0;i<nums.size()-1;i++){
for(int j=0;j<nums.size()-i-1;j++){
if(nums[j]>nums[j+1]){
int temp=nums[j+1];
nums[j+1]=nums[j];
nums[j]=temp;
}
}
}
return nums;
}
};
先平方再氣泡排序
雙指標解法(左右指標):
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(),0);
int i=0;
int j=nums.size()-1;
int k=nums.size()-1;
while(i<=j){
if(nums[i]*nums[i]>=nums[j]*nums[j]){
result[k--]=nums[i]*nums[i];
i++;
}
else{
result[k--]=nums[j]*nums[j];
j--;
}
}
return result;
}
};
左右指標都向中間移動,較大的放入陣列末端直到兩指標相遇