【代码随想录算法第一天| 704.二分查找 27.移除元素】

这篇具有很好参考价值的文章主要介绍了【代码随想录算法第一天| 704.二分查找 27.移除元素】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

702.二分查找

题目链接:二分查找
文章讲解:代码随想录.二分查找
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

二分前提:有序数组,数组中无重复元素
方法:结合数组的特征,可以为左闭右闭区间[0, 数组长度-1],或者左闭右开区间[0, 数组长度)。
思考:左开右开区间,左开右闭区间,会怎样?

小细节:
1. 加减运算符优先级高于位移运算符
2. 求两个数的中间值:mid = start + (end - start >> 1)

int search(int* nums, int numsSize, int target){
    int mid, start, end = 0;
    
	/*左闭右开区间*/
    for(start = 0, end = numsSize - 1; start <= end;)
    {
        mid = start + (end - start >> 1);

        if(target == nums[mid])
        {
            return mid;
        }
        else if(target > nums[mid])
        {
            start = mid + 1;
        }
        else if(target < nums[mid])
        {
            end = mid - 1;
        }
    }

    return -1;

}
int search(int* nums, int numsSize, int target){
    int mid, start, end = 0;

    /*左闭右开区间*/
    for(start = 0, end = numsSize; start < end;)
    {
        mid = start + (end - start >> 1);

        if(target == nums[mid])
        {
            return mid;
        }
        else if(target > nums[mid])
        {
            start = mid + 1;
        }
        else if(target < nums[mid])
        {
            end = mid;
        }
    }

    return -1;

}

27.移除元素

题目链接:移除元素
文章讲解:代码随想录.快慢指针
视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素

踩坑:快慢指针角色必须如此吗?尝试慢指针判断数值,快指针++未成功,二刷再看看文章来源地址https://www.toymoban.com/news/detail-598788.html

int removeElement(int* nums, int numsSize, int val){
    int i, j = 0;

    for(i = 0, j = 0; j < numsSize; j++)
    {
        /*j:快指针,用于获取满足要求的数值*/
        if(val != nums[j])
        {
        	/*i:慢指针,用来记录最终的数组下标*/
            nums[i++] = nums[j];
        }
    }

    return i;
}
int removeElement(int* nums, int numsSize, int val){
    int i, j, cnt = 0;

    if(1 == numsSize)
    {
        if(val == nums[0])
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }
	
	/*暴力解法*/
    for(i = 0; i < numsSize - cnt; )
    {
        if(val == nums[i])
        {
            for(j = i; j < numsSize - cnt - 1; j++)
            {
                nums[j] = nums[j + 1];
            }
            cnt++;
        }
        else
        {
            i++;
        }
    }

    return (numsSize - cnt);
}

到了这里,关于【代码随想录算法第一天| 704.二分查找 27.移除元素】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录图论 第一天 | 797.所有可能的路径 200. 岛屿数量

    代码随想录图论 第一天 | 797.所有可能的路径 200. 岛屿数量 一、797.所有可能的路径 题目链接:https://leetcode.cn/problems/all-paths-from-source-to-target/ 思路:求从0到n-1的所有路径,终止条件是当前节点为n-1。本题图的结构是group[][],group[x]表示x节点所能到达的所有节点的集合,深度

    2024年02月08日
    浏览(54)
  • 代码随想录算法练习Day1:二分查找

    题目链接:704. 二分查找 卡哥视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找 二分法概述: 二分法(Binary Search)是一种在有序数组或列表中查找目标元素的算法。 二分法使用前提 : 有序数组或列表 :二分法要求在查找的数据结

    2024年04月23日
    浏览(52)
  • 【一天三道算法题】代码随想录——Day15(困难题只有一道)

    一. 滑动窗口最大值 题目链接:力扣 思路:         这道题我认为最难的是编程语言本身并没有一个可以让你完全直接开始使用的一个数据结构,也就是说要自己造轮子。并且为了尽可能的减少维护元素的个数我们要学会去在能实现功能的前提下,维护尽可能少的数组元

    2024年02月15日
    浏览(43)
  • 代码随想录Day1 | 数组01- leetcode 704、27

    题目链接:二分查找 关键问题:         - 边界(left、right)、当前查找值(middle)                 - target大于当前查找值 -- 当前查找区域的右边,更改区间left                 - target小于当前查找值 -- 当前查找区域的左边,更改区间right                 - middle的计

    2024年02月16日
    浏览(43)
  • 代码随想录第二十一天

    题目链接 : 二叉搜索树的最小绝对差 自己的思路 :和验证二叉搜索树一样的思路!可以求每个相邻节点的差值的绝对值,然后和之前的差值的绝对值进行比较,取最小的为新的res;递归三部曲:1、传入参数:当前节点;2、终止条件:如果当前节点为空,直接返回;3、单层递

    2024年02月16日
    浏览(58)
  • 代码随想录 LeetCode数组篇 二分查找

    # (简单)704. 二分查找 题目链接 代码随想录 - 二分查找思路 二分查找,思路很简单,但是在while循环left和right的比较是写=还是,还有right=mid还是right=mid-1容易混淆 需要想清楚对区间的定义,是[left,right],还是[left,right) (版本一,左闭右闭版本) (版本二,左闭右开) 题目

    2024年02月02日
    浏览(50)
  • 代码随想录——贪心算法

    代码随想录——回溯 代码随想录——贪心算法 分发饼干 链接:https://leetcode.cn/problems/assign-cookies/description/ 这道题我自己一开始的想法是从大到小遍历孩子数组,对于每个元素从大到小遍历饼干数组,满足则total+1,并且该元素置0防止被再次使用。这样虽然是可以的,但时间复

    2024年02月22日
    浏览(51)
  • 代码随想录day24 开启回溯算法

    感觉回溯算法其实和递归很像,也是用递归的做法,也有三部曲,但又不太一样的地方是递归中类似二叉树,只有纵向遍历(一层层往下遍历,没有横向遍历),而回溯算法中多的for循环就是横向遍历,说实话这一点我没有理解的太深,只是知道它类似于两个for循环中的第一

    2024年01月16日
    浏览(49)
  • 代码随想录day31 贪心算法初探

            就像卡哥视频里说的一样,感觉贪心算法确实没什么固定的套路,唯一的思路就是求局部最优解然后推广到全局最优解,但是什么是局部最优解,这个需要慢慢做题来摸索总结,有点像调参,蛮玄学的,纯考脑子 假设你是一位很棒的家长,想要给你的孩子们一些

    2024年01月18日
    浏览(150)
  • 代码随想录算法训练DAY25|回溯2

    力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]

    2024年01月22日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包