首页 > 编程语言 >算法小菜鸟成长记录Day01-二分查找和双重指针

算法小菜鸟成长记录Day01-二分查找和双重指针

时间:2023-07-12 23:24:14浏览次数:56  
标签:二分 nums int 菜鸟 Day01 mid 查找 left

二分查找和双重指针

今天是代码随想录刷题的第一天,刚开始刷的时候昏昏欲睡,其中用时3h

  • 主要实现以下几个部分
  • 二分查找:其中二分查找中其收获最大部分就在于对左开右闭区间的理解,如果都是闭区间也就是【a,b】,那么在while中的条件就为while(left <= right ),确保其中是拥有元素也就是说在循环遍历的过程中区间元素可以找到的,比如 【1,1)这种条件就是不成立的。
    其中第一个leetcode题目主要使用两种方法进行求解
  • 二分查找题目链接:https://leetcode.cn/problems/binary-search/
  • 题目讲解链接:https://programmercarl.com/0704.二分查找.html
//暴力解法
class Solution {
    public int search(int[] nums, int target) {
        for(int i = 0;i<nums.length;i++)
        {
            if(nums[i] == target)
            {
                return i;
            }
        }
        return -1;
    }
}

左闭右开求解过程

//二分查找求解解法
class Solution {
    public int search(int[] nums, int target) {
        int left = 0; 
        int right = nums.length;
        // 如果是左闭右开区间,[1,1)
        while(left < right)
        {
            int mid  = left+ (right-left)/2;
            if (target < nums[mid])
            {
                right = mid; 
            }
            else if (target > nums[mid])
            {
                left = mid + 1;
            }
            else
            {
                return mid;
            }
        }
        return -1;
    }
}

左闭右闭求解过程

class Solution {
    public int search(int[] nums, int target) {
        int left = 0; 
        int right = nums.length-1;
        while(left <= right)
        {
            int mid  = (left+right)/2;
            if (target < nums[mid])
            {
                right = mid -1; 
            }
            else if (target > nums[mid])
            {
                left = mid + 1;
            }
            else
            {
                return mid;
            }
        }
        return -1;
    }
}
class Solution {
    public int removeElement(int[] nums, int val) {
        int size  = nums.length;
        int slow = 0;
        
        for(int fast = 0; fast < size; fast++)
        {
            if(nums[fast] != val)
            {
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
}
  • 暴力求解
class Solution {
    public int removeElement(int[] nums, int val) {
      int size = nums.length;
        int j = 0;
        for(int i = 0; i<size;i++)
        {
            if(nums[i] == val)
            {
                for(j = i+1;j <size; j++ )
                {
                    nums[j-1] = nums[j];
                }
                i--;
                size--;
            }

        }
        return size;
    }
}

总结:今天的收获还是颇丰的,关于题目的讲解很详细。以前自己没有怎么仔细的刷过题,在实际的代码书写过程中发现刷Leetcode是一件很枯燥的事情,自己一定可以坚持下去感受到算法的快乐

标签:二分,nums,int,菜鸟,Day01,mid,查找,left
From: https://www.cnblogs.com/liyansong0198/p/17549152.html

相关文章

  • HTML-DAY01
    1.前端三剑客之一——HTML(超文本标记语言)什么是HTMLHyperTextMarkupLanguage超文本标记语言,体现可以对文本进行标记(颜色/字体大小),并且对动画,图片进行渲染等等!2.页面标准结构介绍<!DOCTYPEhtml>html5的文档类型<html>html的标准的开始标签<head>头标签<metac......
  • 小波神经网络,二分类,python
    小波神经网络参考博客https://blog.csdn.net/weixin_42051846/article/details/128765295?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168915375016800215081571%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=16891537501680021508......
  • 二分图学习笔记
    定义对于一个无向图\(G=(V,E)\),如果存在点集\(A,B\),满足\(a\neq\varnothing\),\(b\neq\varnothing\),\(A\capB=\varnothing\),\(A\cupB=V\),且\(\forallu,v\inA\)或\(u,v\inB\),都有\((u,v)\notinE\),则称这个图是一个二分图,\(A\)称为这个二分图的左部,\(B\)称为右部。......
  • newcoder61132D <最短路 二分答案>
    题目松鼠回家思路对n个结点的松果个数排序,二分最大松果个数check(x),跑最短路,在不访问比x松果个数多的节点的情况下,从起点到终点消耗的最小体力代码Code#include<iostream>#include<algorithm>#include<vector>#include<cstring>#include<queue>using......
  • P2824 排序(二分答案)
    题目简述给出一个$1$到$n$的排列,现在对这个排列序列进行$m$次局部排序,排序分为两种:0lr表示将区间$[l,r]$的数字升序排序1lr表示将区间$[l,r]$的数字降序排序这里是对下标在区间$[l,r]$内的数排序。最后询问第$q$位置上的数字。分析&性质申必题,对......
  • 第三节 二分
    介绍故事分享......
  • Java学习day01
    我在B站上大学......
  • 二分
    23.7.11Day2二分 这个二分模板好记欸。while(l<=r){intmid=(l+r)>>1;if(check(mid))l=mid+1,ans=mid;elser=mid-1;}RestTheShades 前缀和记录,然后单独计算一下两头的线段,也就是蓝色那一段,用总的减不在里面的就可以。还有一......
  • poj 1064 高精度 二分
    CablemasterTimeLimit: 1000MSMemoryLimit: 10000KTotalSubmissions: 32191Accepted: 6888DescriptionInhabitantsoftheWonderlandhavedecidedtoholdaregionalprogrammingcontest.TheJudgingCommitteehasvolunteeredandhaspromisedtoorganizethe......
  • 浮点数二分模板
    题目给定一个浮点数$n$,求它的三次方根。输入格式共一行,包含一个浮点数$n$。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留$6$位小数。数据范围$−10000≤n≤10000$输入样例:$1000.00$输出样例:$10.000000$思路浮点数二分可以直接分,无需考虑边界情况......