首页 > 编程语言 >代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

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

时间:2023-08-10 16:14:17浏览次数:33  
标签:二分 27 target nums int 随想录 查找 数组 移除

704 二分查找 题目

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
第一想法
判断条件是 value = target
因为数组是升序,其实每种查找方法应该相差不大?
不过题目都标了二分查找了emmm 
思路&题解
class Solution {
    public int search(int[] nums, int target) {
        // 左闭右闭的情况 左闭右开就暂时不想了,心累orz
        // target和区间边界判断,肯定不在直接退出
        if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }
        //边界
        int left = 0, right = nums.length - 1;
        // 停止条件:target和某一边界重合 
        // 闭区间是可以取到边界的所以是<=不是<
        while (left <= right) {
            //中间值 
            int mid = left + ((right - left) / 2);
            if (nums[mid] == target){
                return mid;
            }
            // 大于mid 落在右边 更新left    
            // 因为一开始考虑的是闭区间,所以要保证循环时即使改变范围也还是闭区间 所以有mid+1 和mid-1
            else if (nums[mid] < target){
                left = mid + 1;
            }
            // 小于mid 落在左边 更新right      
            else if (nums[mid] > target){
                right = mid - 1;
            }  
        }
        return -1;

    }
}
27 移除元素 题目
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
第一想法
 O(1) 额外空间并 原地 修改输入数组==>意思是只有一个多余的空位可以考虑?
做了二分题目后第一反应是:用sort先排序,再二分查找,但是这题没说元素不重复... 
卒
思路&题解
class Solution {
    public int removeElement(int[] nums, int val) {
        // 快慢指针 慢指针
        int slowIndex = 0;
        // 快指针 寻找新数组所需的元素
        for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
        // 这一步真的...去掉=target的 其实就是留下≠target的,
        // 如有target,slow留在原地,fast向前走,用不是target的后面的值来覆盖掉前面的target
            if (nums[fastIndex] != val) {
                nums[slowIndex] = nums[fastIndex];
                slowIndex++;
            }
        }
        return slowIndex;
    }
}
  文档讲解 https://www.programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html https://www.programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 视频讲解 https://www.bilibili.com/video/BV1fA4y1o715/?vd_source=cf378ec519f76396d006e5f8b80218db https://www.bilibili.com/video/BV12A4y1Z7LP/?spm_id_from=333.788&vd_source=cf378ec519f76396d006e5f8b80218db 心得
其实参加训练营之前有练过一点点(从数组到字符串),但是这东西真的几天不复习就很难再想起来
而且口述思路看似简单,实际上写代码时才发现有很多细节是需要考虑的,之前面试写代码的时候发现数组的初始化都没法直接正确地写出来,基础还是不太牢,略痛苦
最近真的好多事啊,不过因为经历了这么多深刻明白一切只能靠自己,只有好好坚持下来才能达成自己的目的...

需要记忆的点:
    (704)
    1、有序、无重复数组用二分查找
    2、首先判断target和区间边界
    3、保证一开始是双闭区间的话,循环中改变边界也要是双闭区间,前后的两个区间不能重复包含某个边界值
    (27)
    1、首先把快慢指针法这种方法刻进DNA(到底怎么样才能想出这样的办法能不能给我看看你们的脑子
    2、快指针用来 向前移动找值
    3、慢指针用来 留在原地等覆盖
    4、一起向前的时候,就意味着值是满足需求的,留着;不一起向前,就是要覆盖 
    
附一个崩溃  

标签:二分,27,target,nums,int,随想录,查找,数组,移除
From: https://www.cnblogs.com/bbnltxdy/p/17620594.html

相关文章

  • 实践指南-前端性能提升 270%
    一、背景当我们疲于开发一个接一个的需求时,很容易忘记去关注网站的性能,到了某一个节点,猛地发现,随着越来越多代码的堆积,网站变得越来越慢。本文就是从这样的一个背景出发,着手优化网站的前端性能,并总结出一套开发习惯,让我们在日常开发时,也保持高性能,而不是又一次回过头来优化性能......
  • 代码随想录算法训练营第十天|力扣232.用栈实现队列、力扣225.用队列实现栈
    栈与队列理论知识栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。不像是set或者map提供迭代器iterator来遍历所有元素。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制......
  • abc227e
    E-Swap首先我们注意到,加入我们想要一个串T,那么最小步数是唯一的。设\(f[i][j][e][y]\)表示当前到第i个字符,一共用掉了j次,前面有e个E,y个Y。然后转移即可,因为k不会大于\(n^2\),预处理第x个字符的位置即可。#include<algorithm>#include<cstdio>#include<cstring>#include<ma......
  • 代码随想录算法训练营第十四天| 理论基础 递归遍历 迭代遍历
     理论基础    卡哥建议:需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义   文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html   补充的知识点:   名词的概念看卡哥文章。二叉树......
  • 外设移除区别/终端记录/重设密码/python测试/数据拷贝最大限度
    1.1【卸载】【弹出】【安全移除驱动器】区别【卸载】只是解除挂载(可以直接重新挂载)【弹出】弹出读卡器里面的存储卡(需要重新插入存储卡)【安全移除驱动器】断掉设备电源,移除设备(需要重新插入设备)1.2记录你的终端操作──script   (点击详细)如果过程不是很长,一屏以内的话一......
  • (未完全掌握)代码随想录算法训练营第八、九天|KMP算法;力扣28.实现strStr(),力扣459.重
    KMP算法(没掌握)主要功能:字符串匹配理论:检测文本串中是否出现过模式串前缀就是包含首字母不包含尾字母的所有子串后缀就是包含尾字母不包含首字母的所有子串最长相等前后缀:对子串分别分析,从左向右前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从......
  • [代码随想录]Day13-二叉树part02
    题目:102.二叉树的层序遍历思路:先把根放进去,然后每次都是左右就可以了。记录一个深度,当len(res)==deepth的时候就说明这个深度还没有实例化,先搞一个再去收集。代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeN......
  • r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
    AMD锐龙77730U采用Barcelo8核心/16线程主频2.0GHz最高频率4.5GHz三级缓存运行内存16M内存类型LPDDR4X内存频率4266MHz笔记本cpu选r77730u还是i712700h这些点很重要http://www.adiannao.cn/dyi712700H参数配置:10nm工艺制程,6个大核8个小核,14核心20线程,3.5GHz的主频,4.7GH......
  • js 添加和移除disabled属性
    //js的方式//动态修改元素disabled属性functiondisableTest(element,val){document.getElementById(element).disabled=val;}document.getElementById("uid").disabled="";//启用document.getElementById("uid").disabled="disabled"......
  • Vue3+ElementPlus,Module parse failed: Unexpected token (3:27)
    一、环境vue3,ElementPlus,@vue/cli5.0.8,npm 9.6.7。我在复制elementplus官网的一些代码到vue3框架里测试时出现的问题。二、不报错方法图片位置删除lang=“ts”就不报错了 ......