704. Binary Search

题目链接:Link: 704. Binary Search
思路链接:代码随想录数组-二分法

思路

找出low与high的中间值mid,将nums[mid] 与target进行比较。通过for循环,若nums[mid] < target, 则更新low;若nums[mid] > target, 则更新high;若nums[mid] == target,则return mid。注意定义的区间对于while条件以及mid处理的影响;注意target大于最大值或小于最小值的临界情况。

看到题目时

  • 因为是第一次刷题,刚看到题就发现自己对于binary search的记忆已经开始模糊了,于是通过google复习了一下binary search的基本思想,然后开始独立做题。
  • 因为只是粗粗地看了一遍对于mid的处理出了一点问题,但是也能过,只是runtime很慢。
  • 没有意识到区间左闭右闭以及左闭右开的问题。

看完卡哥视频文章后

  • 理解了区间左闭右闭以及左闭右开的要点
  • 意识到了low + high可能会导致溢出问题,应该使用low + (high - low) / 2
  • 再次上手后实现了左闭右闭以及左闭右开的代码

收获

  • binary search思想
  • 区间的重要性
  • 溢出问题
  • 需要考虑边界

代码

class Solution {public int search(int[] nums, int target) {if (target > nums[nums.length - 1] || target < nums[0]) {return -1;}// 左闭右闭int low = 0;int high = nums.length - 1;while (low <= high) {int mid = (low + high) / 2; // 注意可能会溢出if (nums[mid] == target) {return mid;}if (nums[mid] < target) {low = mid + 1;}if (nums[mid] > target) {high = mid - 1;}}return -1;}
}
class Solution {public int search(int[] nums, int target) {if (target < nums[0] || target > nums[nums.length - 1]) {return -1;}// 左闭右开int low = 0;int high = nums.length; // 注意high的取值while (low < high) {int mid = (low + high) / 2; // 注意可能会溢出if (nums[mid] == target) {return mid;}if (nums[mid] < target) {low = mid + 1;}if (nums[mid] > target) {high = mid;}}return -1;}
}

27. 移除元素

题目链接:Link: 27. Remove Element
思路链接:代码随想录数组-移除元素

思路

  • 暴力解法:定义移除后的数组size,两层for循环,外层查找需要移除的元素,如果发现了需要移除的元素,则进入内层循环,将移除元素后的所有元素向前挪一位覆盖数组,更新size以及index。
    Runtime: O(n^2)
  • 双指针法:定义fast指针以及slow指针,一层for循环,fast指针首先遍历数组,查找需要保留的元素,将元素赋值给nums[slow],更新slow指针++。
    Runtime: O(n)

看到题目时

  • 想到了暴力解法,但是用代码实现花了好久,感觉自己的代码实现能力还有所欠缺

看完卡哥视频文章后

  • 理解了双指针法
  • 理解了相向双指针法,但没去实现

收获

  • 双指针法
  • 看到了代码实现能力的不足

代码

class Solution {public int removeElement(int[] nums, int val) {// 暴力解法int size = nums.length;for (int i = 0; i < size; i++) {if (nums[i] == val) {for (int j = i + 1; j < size; j++) {nums[j - 1] = nums[j];}i--;size--;}}return size;}
}
class Solution {public int removeElement(int[] nums, int val) {// 双指针法int slow = 0;for (int fast = 0; fast < nums.length; fast++) {if (nums[fast] != val) {nums[slow] = nums[fast];slow++;}}return slow;}
}

刷题第一天| 704. 二分查找、27. 移除元素相关推荐

  1. 代码随想录算法训练营第一天|704二分查找 27移除元素

    理论基础 1.数组是存放在连续内存空间上的相同类型数据的集合 2.数组可以方便的通过下标索引的方式获取到下标下对应的数据 3.数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要 ...

  2. JS刷题第一天| 704. 二分查找、27. 移除元素

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

  3. Leetcode 704.二分查找 27.移除元素 代码随想录day1

    本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...

  4. day1 704.二分查找 27.移除元素

    文章目录 704.二分查找 思路 代码实现 27.移除元素 思路 代码实现 704.二分查找 题目链接:704.二分查找 思路 使用二分法的前提条件: 1.有序数组 2.无重复元素 代码实现 左闭右闭 ...

  5. 代码修炼Day1_LeetCode704二分查找27移除元素

    代码修炼Day1_LeetCode704二分查找&27移除元素 一些数组基本知识 数组下标都是从0开始的 数组内存空间的地址是连续的 题目链接: 力扣704二分查找 二分查找思想 针对升序数组 ...

  6. 第一天| 704. 二分查找、27. 移除元素。

    第一天| 704. 二分查找.27. 移除元素. 704.二分查找 1. 题目描述 题目链接:力扣704题 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函 ...

  7. 打卡第一天 704. 二分查找、27. 移除元素

    打卡第一天| 704. 二分查找.27. 移除元素 704.二分查找 看到题目就想到曾经做过类似的,先取得左右边界,然后求中间值,如果要求的数在nums[middle]左边,就把右边界取middle- ...

  8. 代码随想录Day01:数组理论基础、二分查找、移除元素

    目录 数组理论基础.二分查找.移除元素 1.数组理论基础 2.Leetcode704.二分查找 方法一 左闭右闭: 方法二 左闭右开: 方法三 左开右开: 方法四 左开右闭: 3.Leetcode27 ...

  9. Day01.二分查找、移除元素

    Day01.二分查找.移除元素 0704.二分查找 题目链接:0704.二分查找 思路:二分查找,仅对有序数组有效.每次需要数组的中间值,与目标值比较大小,如果中间值比目标值大,说明目标值位置在lef ...

最新文章

  1. Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 建设过程
  2. python自动化测试看什么书-Python自动化测试入门,看这一篇就足以
  3. DOM-14 【实战】解决事件代理和鼠标移动事件的窘态
  4. Nginx大规模并发原理
  5. python-day2
  6. 92款jQuery图片展示/幻灯插件开源软件
  7. 实验计算机控制器的实验结论,计算机毕业论文控制器实验报告.doc
  8. 构建第一个fabric网络
  9. 欧盟网络安全局发布《供应链攻击威胁全景图》报告(上)
  10. 相机模型与标定(一)--相机标定概述
  11. GRE红宝书使用方法介绍
  12. java一寸是多少像素_一寸照片的尺寸是多少像素
  13. if else 的使用
  14. Exchange2010启用反垃圾邮件功能
  15. 2021-2027全球与中国零售空间规划软件市场现状及未来发展趋势
  16. React 运行流程
  17. Android属于绑定服务特点是,Android P HIDL服务绑定模式与直通模式的分析 (原创)
  18. 赣南雪景美得像妖孽 让人窒息
  19. 垃圾回收之G1收集过程
  20. bandgap的理解(内部带隙电压基准)

热门文章

  1. Beta分布 原理理解及python 绘图
  2. Eclipse target目录没有classes文件夹
  3. VTK MPR 每张图对应空间位置提示
  4. 链路追踪 SkyWalking 源码分析 —— Agent 插件体系
  5. 盘点 Oracle 11g 中新特性带来的10大性能影响
  6. 软件测试笔试真题电子版一
  7. 测度论与概率论笔记5:测度空间上的积分(下)
  8. 【转】解决——DBR记录的分区扇区总数溢出
  9. 常用的String的方法笔记
  10. 年会排节目单:检查同一个演员不会出现在连续的三个节目之中