leetcode第一天

leetcode 704 二分查找
题目:https://leetcode.cn/problems/binary-search/description/
思想:通过对有序数组的二分查找可以减少时间复杂度,左边小了向右移,右边大了向左移。主要困难在于边界控制,即while循环中是否需要加上等号,还有最初的left和right边界是否需要加一减一。

  class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        // if(nums.size() == 1 && nums[0]!=target)
        //     return -1;

        int left = 0,right = nums.size()-1;
        int mid = 0;
        while(left <= right)
        {
            mid = (left + right)/2;
            if(nums[mid] > target)
            {
                right = mid - 1;
            }
            else if(nums[mid] < target)
            {
                left = mid + 1;
            }
            else if(nums[mid] == target)
            {
                return mid;
            }
        }
        cout << mid;
        return -1;
    }
};          

leetcode 27 移除元素
题目链接:https://leetcode.cn/problems/remove-element/description/
思想:数组内元素顺序可以随意,这就比较好办,直接把目标元素移动到末尾,同时记录元素个数,最后返回元素个数值即可。关键在于用一个tail变量记录尾部有多少个需去除元素,然后从前往后遍历数组,使目标元素移到最后,同时返回值即总个数减去目标元素个数。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int tail = 0;//记录尾部有多少个去除元素
        for(int i = 0; i<nums.size()-tail; i++)
        {
            if(nums[i] == val)
            {
                for(int j = nums.size()-tail-1 ; j >= i ; j--)
                {
                    if(nums[j] != val)
                    {
                         swap(nums[i],nums[j]);
                         
                         break;
                    }
                    tail++;
                }
            }
        }
        return nums.size()-tail;
    }
};
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值