day1打卡

ikun1111發表於2024-08-16

704:二分查詢

題目連結:https://leetcode.cn/problems/binary-search/
這個還是比較簡單的
int search(vector& nums, int target)
{
int low = 0;
int high = nums.size() - 1;
int mid = (low + high) / 2;
while(nums[mid] != target || low >= high)
{
if(nums[mid] < target)
{
low = mid + 1;
mid = (low + high) / 2;
}
else
{
high = mid - 1;
mid = (low + high) / 2;
}
}
return nums[mid]
}
27 移除元素
題目連結:https://leetcode.cn/problems/remove-element/

  1. 暴力解法
    能自己寫,但是有些細節還不太對,想了一下為什麼需要i--,因為for迴圈裡面操作執行完了之後,i++,但是陣列又向前移了,所以需要i--
    int removeElement(vector& nums, int val) {
    int size = nums.size();
    for(int i = 0; i < size; ++i)
    {
    if(nums[i] == val)
    {
    for(int j = i +1; j < size; ++j)
    {
    nums[j-1] = nums[j];
    }
    size--;
    i--;
    }
    }
    return size;

    }

997 有序陣列的平方
雙指標法,看了講解之後嘗試自己寫
nt i = 0;
int j = A.size() - 1;
vector result(A.size(), 0);
int k = result.size() - 1;
for(;i <= j;)
{
int left = A[i] * A[i];
int right = A[j] * A[j];
if(left < right)
{
result[k--] = right;
j--;
}
else
{
result[k--] = left;
i++;
}
}
return result;

  1. 雙指標法
    一開始嘗試自己寫,然後想法不對
    int removeElement(vector& nums, int val)
    {
    int slow = 0;
    int fast = 0;
    for(; fast < nums.size(); fast++)
    {
    if(nums[fast] != val)
    {
    nums[slow++] = nums[fast];
    }
    }