首页 > 其他分享 >数组

数组

时间:2023-11-17 13:56:12浏览次数:30  
标签:变量 数组 二分法 右闭 区间 左闭

一、二分

二分法使用条件:

1、要有序。

2、无重复的数。

二分法算细节:

二分有不变量和变量。变量的改变要始终遵循不变量的规则。

区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。

三种写法。

最经典也是最基础的是左闭右闭区间。

注意三个要点,以左闭右闭为例,其他同理。

1、左闭右闭区间所以l=0,r=len-1;

2、因为l和r都能取到所以l==r有意义,所以while循环里面要写明l<=r;

3、更新时,因为区间左闭右闭,所以边界更新时l=mid+1/r=mid-1。

 

写的时候注意区间,注意以上三点则左闭右闭,左闭右开都可以成功写出。但左开右闭,如果我们数据从数组位置0存放,不能取l=-1,所以出问题。数组从1位置存放就可以了。

按照上面这种思路,把握不变量不用考虑特殊情况,自己乱写可能也能过,但要考虑边界条件很多。

 

二分法还可以用来寻找区间。

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

 

 

       

标签:变量,数组,二分法,右闭,区间,左闭
From: https://www.cnblogs.com/bhd123/p/17837681.html

相关文章

  • jq 数组对象,重复数据进行合并
    var bindif = [{        "ifname": "Ge0/2/1",        "ip": "20.1.1.1",        "mask": "255.255.255.0"    }, {        "ifname": "Ge0/2/5",        "ip6addr": &q......
  • 数组下标运算符[]
    数组表示一块连续的特定类型对象组成的空间结构,指针通俗指代某个对象的地址(其实包含了地址和地址上对象大小两层意思),数组和指针不能等同。也许唯一的联系是,数组的运算采用指针的方式实现。所以当我们定义一个数组array时,数组array在大多数表达式中会转换成首元素的指针。而很多......
  • 汇编-SIZEOF返回数组字节总数
     SIZEOF操作符的返回值等于LENGTHOF与TYPE的返回值的乘积.386.modelflat,stdcall.stack4096ExitProcessPROTO,dwExitCode:DWORD.dataintArrayWORD32DUP(0).codemainPROCmoveax,SIZEOFintArray;EAX = 00000040h=64INV......
  • 十、数组
    十、数组1、数组的概念1)引出数组需求:学校为了统计学生的信息,需要设计一个程序,要求如下,一共有十个学员,要求依次输入各位学员的学号,并将其打印出来。#include<iostream>intmain(){intstudentId1,studentId2,studentId3,studentId4,studentId5;std::cin>>s......
  • Java数组05:数组的使用
    publicclassArrayDemo03{publicstaticvoidmain(String[]args){int[]arrays={1,2,3,4,5};//打印全部的数组元素for(inti=0;i<arrays.length;i++){System.out.println(arrays[i]);}System.out.pr......
  • 数组类算法题——合并非递减数组
    合并非递减数组题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应......
  • Java数组03:三种初始化及内存分析
    声明的时候数组并不存在,只有创建的时候数组才存在  publicclassArrayDemo02{publicstaticvoidmain(String[]args){//静态初始化:创建+赋值int[]a={1,2,3,4,5,6,7,8};System.out.println(a[0]);//动态初始......
  • Java数组02:数组的声明和创建
    ublicclassArrayDemo01{publicstaticvoidmain(String[]args){//数组类型int[]nums;//intnums[];声明一个数组nums=newint[10];//这里面可以存放10个int类型的数字;创建一个数组//给数组赋值for(inti=0;i<=9;+......
  • 实验4 C语言数组应用编程
    1实验任务1task1_1源代码1#include<stdio.h>2#defineN43voidtest1(){4inta[N]={1,9,8,4};5inti;6//输出数组a占用的内存字节数7printf("sizeof(a)=%d\n",sizeof(a));8//输出int类型数组a中每个元素的地址、值9for(i=0;i<N;......
  • Promise.all(iterable) 参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员
    下面关于Promise的all方法说法错误的是()Apromise.all(iterable),参数是一个数组B只有这个数组中的所有promise实例都resolve之后才会触发其返回的promise实例的thenC只要其中有任何一个promise实例被reject,那么最终的promise实例将触发catchD触发then时可以只带上iterable......