首页 > 编程语言 >代码随想录算法训练营第一天|704,34,35(二分查找),27(双指针)

代码随想录算法训练营第一天|704,34,35(二分查找),27(双指针)

时间:2024-05-22 14:09:55浏览次数:15  
标签:二分 27 704 随想录 查找 数组 指针 左闭 left

二分查找

1. 使用条件:数组,升序,值不唯一。
2. 时间复杂度 O(logn)

可分为左闭右闭,左闭右开两种区间类型来求解。

  1. 左闭右闭:left = 0, right = nums.Length-1,while(left<=right),right = middle - 1.
  2. 左闭右开:left = 0, right = nums.Length,while(left<right),right = middle.

在二分查找过程中,如果middle下标的值为目标值,那么就会直接返回,不再进行下一次二分查找。

如果目标值在数组中不存在,那么会二分查找到最后,如果时左闭右闭,left最后会等于right,反之是左闭右开,left会等于right-1。

  • 但无论哪一种区间,最终left处于的位置,即是这个目标值应该插入到这个数组的位置。(35)
  • 每次二分查找会找到数组中唯一的target值,而对于数组中target值可能有重复个时,可以通过两次二分查找(找到middle不停下,记录下这个middle,并且让right或left更新),一次不断向左,一次不断向右,就可以找到数组中等于target值的最左和最右下标。(34)

双指针方法

1. 常用于数组和链表,解决通过条件寻找新数组或链表的问题。
2. 可以分为快慢指针 和 头尾指针。
3. 时间复杂度O(n),常作为暴力解法的优化,用一个for/while来代替两个。

快慢指针

同时从起点出发,快指针负责探索并找到需要的值,需要不断前进(即for/while的值)。慢指针负责将快指针探索到的可靠值保留下来,作为新数组的尾指针。

这种方法不会改变数组中有效值的相对位置,会覆盖无效值(正常行为)。

头尾指针

一头一尾分别出发,直到相遇。头指针找不可靠值,尾指针找可靠值。每当头指针找到不可靠值,便让尾指针的值将其覆盖,然后两个指针继续朝自己的方向找到下一个符合的值。

这种方法会改变数组中有效值的相对位置(数组后半段的值到了前半段),会覆盖无效值(正常行为)。

标签:二分,27,704,随想录,查找,数组,指针,左闭,left
From: https://www.cnblogs.com/sakilohale/p/18206072

相关文章

  • 算法随想录打卡第一天|704. 二分查找、27. 移除元素
    704.二分查找-力扣(LeetCode)自己的解法是这样的,超出了时间限制,现在觉得应该是在mid的计算中出了问题。然后在mid的转换中没有right减去1或者left加上1。这两点的问题。自己很习惯的方式是左闭合加上右闭合。可以省去很多对于临界值忘记考虑的麻烦。超时代码贴出:publicin......
  • 代码随想录算法训练营第十四天 | 二叉树遍历
    递归法文章讲解视频讲解递归三要素:1确定递归函数的参数和返回值2确定终止条件3确定单层递归的逻辑前序遍历题目链接递归的参数和返回值:传入当前节点和保存结果集的数组,不需要返回值终止条件:当前节点为空时单层递归逻辑:保存当前节点的值到结果集中classSolution......
  • 代码随想录算法训练营第第14天 | 二叉树递归遍历(递归法、迭代、统一的迭代方法)
    递归遍历(必须掌握)二叉树的三种递归遍历掌握其规律后,其实很简单题目链接/文章讲解/视频讲解:https://programmercarl.com/二叉树的递归遍历.html迭代遍历(基础不好的录友,迭代法可以放过)题目链接/文章讲解/视频讲解:https://programmercarl.com/二叉树的迭代遍历.html统一迭代......
  • CF1278F Cards(斯特林数+二项式定理)
    题意简述有\(m\)张牌,其中有一张是王牌。你现在可以洗\(n\)次牌(每种牌堆序列等概率出现),然后查看牌堆顶的第一张牌。设\(x\)为\(n\)次洗牌中第一张牌是王牌的次数,则得分为\(x^k\)。求得分的期望值对\(998244353\)取模的值。\(1\len,m<998244353,k\le5000\)分析将......
  • 【UR #27】红场阅兵
    题意给定一个积性函数\(S\),保证\(S(p^k)\)是关于\(p^k\)的二次函数,求\(\sum_{i=1}^n\sum_{j=1}^nS(ij)\)。数据范围:\(n\le10^9\)。算法一为了解决上面的问题,我们需要把积性函数推广到二维。首先二维数论函数\(g(x,y)\)还是没啥性质的普通函数。我们称二维数......
  • hdu4027(线段树区间操作)
    Problem-4027(hdu.edu.cn)许多邪恶的战舰在战斗前排成一排。我们的指挥官决定使用我们的秘密武器来消灭战列舰。每艘战列舰都可以标记为耐力值。对于我们秘密武器的每一次攻击,它都可能降低连续部分战列舰的续航能力,使它们的续航力达到其原始续航力值的平方根。在我们的秘密武......
  • 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值 347. 前k个高频元素
    239.滑动窗口最大值题目链接文章讲解视频讲解思路:使用单调队列,来维护有可能成为最大值的元素;   当窗口向右滑动时,判断移除的元素是否是队首元素如果是的话出队;   新加入的元素依次和队尾元素作比较,如果大于队尾元素则将队尾元素循环出队,这样可以保证队列中始终维持......
  • HTML 27 - Adding Favicon
     WhatisaHTMLFavicon?Afaviconisasmallimagethatrepresentsyourwebsiteandhelpsusersidentifyitamongmultipletabs,bookmarksandsearchresults.Itcanbeinvariousformats,suchasICO,PNG,GIF,JPEG,orSVG,butICOisthemostwidely......
  • 全网首一份!你最需要的PPTP MS-CHAP V2 挑战响应编程模拟计算教程!代码基于RFC2759,附全
    本文基于网络密码课上的实验本来想水一水就过去,代码就网上找找,不行就GPT写,但是!一份都找不到,找到的代码都是跑不了的,总会是就是乱七八糟。所以准备认真的写一份。代码编译成功的前提是要预先装好openssl库!本随笔主要有三个内容:编写程序,模拟计算NTResponse、AuthenticatorRespo......
  • LG10270
    思路十分简单,但需要一定的转化,好题。记\(s_{i,j}\)表示第\(i\)行的第\(j\)个字符。考虑任意一点\((i,j)\),假设在此之前没有经过字母不同的路径,若\(s_{i,j+1}\)和\(s_{i+1,j}\)不同,则可以分别往这两个方向走,最长公共前缀也就固定下来了,长度为\(i+j-1\)。于是我们就可......