精华内容
下载资源
问答
  • 二分找下标

    2021-02-22 22:07:11
    =0)个下标i,0<= i <=n-1, 使得T[i]=i. 设计一个有效算法找到这些个下标. 数据输入: 第1行有一个正整数n, n<=1000000, 表示有n个整数(保证在int内). 接下来一行是这n个整数. 结果输出:T[i]=i的下标;若...

    设n个不同的整数排好序后存于T[0:n-1]中. 若存在若干(>=0)个下标i,0<= i <=n-1, 使得T[i]=i. 设计一个有效算法找到这个下标. 

    数据输入: 第1行有一个正整数n, n<=1000000, 表示有n个整数(保证在int内). 接下来一行是这n个整数.

    结果输出:T[i]=i的下标;若没有则输出No .注意输出最后有个空格.

      测试输入 期待的输出 时间限制 内存限制 额外进程
    测试用例 1 以文本方式显示
    1. 2↵
    2. 0 1↵
    以文本方式显示
    1. 0 1 ↵
    1秒 64M 0
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=1e6+5; 
    int n,a[N],b[N],s=0,flag=1;
    
    void bs(int l,int r)
    {
    	int mid=(l+r)/2;
    	if(l<=r)
    	{
    		if(a[mid]==mid)
    		{
    			b[s]=mid;
    			s++;
    			bs(l,mid-1);
    			bs(mid+1,r);
    		}
    		else if(a[mid]<mid)
    		{
    			if(flag) bs(mid+1,r);
    			else bs(l,mid-1);
    		}
    		else if(a[mid]>mid)
    		{
    			if(flag) bs(l,mid-1);
    			else bs(mid+1,r);
    		}
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=0;i<n;i++) scanf("%d",&a[i]);
    	if(a[0]>a[n-1]) flag=0;
    	bs(0,n-1);
    	if(s>0)
    	{
    		sort(b,b+s);
    		for(int i=0;i<s;i++) printf("%d ",b[i]);
    		printf("\n");
    	}
    	else printf("No \n");
    } 

     

    展开全文
  • 数据结构习题二分找下标程序
  • 二分查找找下标或者值

    千次阅读 2015-10-20 22:04:48
    } //二分查找下标 public static int middleSort(int value,int[] a){ // boolean boo=false; int mid=a.length/2; int min=0; int i=1; int max=a.length-1; while(ia[mid]){ min=mid; mid=(min+max)/2; ...
    public class Util {
    //求最大值
         public static int maxValue(int a,int b){
        int max=0;
        if(a>b){
        max=a;
        }else{
        max=b;
        }
        return max;
         }
         //求最小值
         public static int minValue(int a,int b){
        int min=0;
        if(a>b){
        min=b;
        }else{
        min=a;
        }
        return min;
         }
         //选择排序
         public static int[] selectSort(int[] a){
        //这个地方的min的意思是默认每次排序的那个min为下坐标 而不是都是0 所以应该放在for循环里面
    //     int min=0;
        int n=a.length;
        for(int i=0;i<n-1;i++){
        int min=i;
        for(int j=i+1;j<n;j++){
        if(a[min]>=a[j]){min=j;}
        }
        if(i!=min){
        int temp=a[min];
            a[min]=a[i];
            a[i]=temp;
        }
        }
        return a;
         }
         //二分查找找出下标
         public  static int middleSort(int value,int[] a){
    //     boolean boo=false;
        int mid=a.length/2;
        int min=0;
        int i=1;
        int max=a.length-1;
        while(i<a.length){
         i++;
        if(value>a[mid]){
        min=mid;
        mid=(min+max)/2;
        System.out.println("one"+i);
    //     mid=(mid+max)/2; 
        }
        else if(value<a[mid]){
        max=mid;
        mid=(max+min)/2;
        System.out.println("two"+i);
    //     mid=(mid+min)/2;
        }else if(value==a[mid]){
    //     boo=true;
        break;
        }
        }
        System.out.println("i"+i);
        return mid;
         }
         //二分查找排好序列里面是否有那个值
         public static  boolean isValueByMiddle(int value,int []a){
        boolean boo=false;
        int min=0;
        int max=a.length-1;
        int i=1;
    //     int mid=a.length/2;
        while(max-min>1){
        i++;
        int mid=(min+max)/2;
    //     System.out.println("mid"+mid);
        if(value>a[mid]){
        min=mid+1;
    //     mid=(min+max)/2;
    //     System.out.println("one"+i);
        }
        else if(value<a[mid]){
        max=mid;
    //     mid=(min+max)/2;
    //     System.out.println("two"+i);
        }
        else if(value==a[mid]){
    //     System.out.println("in true");
        boo=true;
        break;
        }
        }
        System.out.println("i"+i);
        return boo;
         }
    }

     

    展开全文
  • php教程二维数组二分查找需数组中某一元素下标 成功不是将来才有的而是从决定去做的那一刻起持续累积而成以下的在PHP中二维数组二分查找需数组中某一元素下标希望对大家有所帮助更多信息请关注 如果你的数组有...
  • 二分查找数组下标

    2021-05-05 18:52:39
    数组二分排序法 二分查找数组,数组必须是有序的 按照从小到大排序 import java.util.Arrays; public class ErFentest { public static void main(String[] args) { //二分查找数组,,数组必须按照从小到大排序 ...

    查找数组下标,索引,二分

    二分查找数组,数组必须是有序的

    按照从小到大排序

    import java.util.Arrays;
    public class ErFentest {
        public static void main(String[] args) {
            //二分查找数组,,数组必须按照从小到大排序
            int index = f(4);//找14的索引
            System.out.println(index);//打印14的索引
        }
        public static int f(int args) {
            int[] a = {1,4,8,12,20,24};
            int s = 0;//开始索引
            int e = a.length - 1;//结束索引
            while (s <= e) {
                int m = (s + e) / 2;//取中间数字索引
                if (a[m] == args) {
                    return m;//返回该数索引
                } else if (a[m] > args) {
                    e = m - 1;
                } else {
                    s = m + 1;
                }
    
            }
            return -1;//不在返回-1
    
        }
    }
    
    展开全文
  • 输入为递增数组,每个元素都是整数且唯一,值都在n-1之间 首先因为值在n-1之间想到循环排序,但这个以及是排序...二分查找,如果发现相等则返回,如果发现不相同,则如果下标大于值则往右下标小于值则往左。 ...

    输入为递增数组,每个元素都是整数且唯一,值都在n-1之间
    首先因为值在n-1之间想到循环排序,但这个以及是排序好了,所以用二分是O(logn)。
    因为这是个递增数组而且每个元素都是整数且唯一,找出一个元素的下标和内容相同。二分查找,如果发现相等则返回,如果发现不相同,则如果下标大于值则往右找,下标小于值则往左找。

    展开全文
  • 二分答案,先二分出一个数,再用二分算出这个数在两个排序数组排序第几,然后和k做比较,最后以这个比较为依据接着二分直到求出第k个数。 本来这是两重二分,由于楼主的懒已经没有办法治疗了,用库函数upper_bound...
  • 楼主在这里更新了《二分查找综述》第一题的解法,比较类似,当然是今天临时写的。 知道了这题就完成了leetcode 4的第二重二分的写法了吧,楼主懒。。。 1 class Solution { 2 public: 3...
  • 利用二分查找出所给出的数在数组中的下标 输入格式: 第一行输入n和m表示数组有n个数据,m表示要对m个数进行查找 输出格式: 所有输出在一行完成,行末没有多余空格和多余回车。 输入样例: 5 5 1 2 3 4 5 1 2 3 4 5...
  • 题目:出升序排序数组第一个小于目标值的所有下标,第一个大于目标值的所有下标——四次二分搜索 思路: 1. 第一次二分目标值的最左下标 2. 第二次二分小于目标值的第一个数的值的最左边界 3. 第三次...
  • 目录任务概述相关概念代码运行结果欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段...使用冒泡排序对一串数组进行排序并用二分查找出某个
  • Java 手写二分查找算法,递归与非递归你要走二分查找,你首先得支楞起来啊~(数组有序)一.递归实现二. 非递归实现大佬们,把你们的优秀代码展示出来啊~(例如Python一行?),嘤嘤嘤~ 二分查找也称折半查找(Binary Search)...
  • 二分查找讨论边界问题,找到数组中目标数字的最小下标和最大下标问题描述最小下标min求法最大下标max求法 问题描述 给定一个数组 nums 按升序排列,例如:[5,6,7,8,9,9,9,10] 出目标值 target =9 的数组最小下标...
  • 二分查找 输出元素下标

    千次阅读 2018-03-09 13:13:03
    #define n 6/* 折半查找法出该数是数组中第几个元素的值,如果不在数组中,则输出”无此数”*/int main(int argc, char *argv[]) { int a[n]={1,3,5,7,9,10};// 012345 5/2=2 4&lt;5 and mid-1 //////...
  • } //###将排序后的结果使用二分查找要的值find //定义三个变量 第一个是数组第一个数下标,第二是数组最大数下标加第一数下标减去第一个数除2,第三是最大数组下标 //判断这个数是大于中间这个数还是小于–决定往...
  • //java coding import java.util.Scanner; /** * @author * 2014-5-22 下午04:29:56 ...* 二分查找 */ public class Binary_search { public static int device(int[] a,int c) { int begin=0; i...
  • 采用二分查找:如果数组中的数字小于下标,由于下标是-1的递减数列,但是数组中的元素差值大于等于-1,因此左边的不可能等于下标。如果数组中的数字大于下标,同理,之后的数字肯定都大于下标,往左边查找。 算法...
  • 从大到小排序: int bsearch(int A[],int l,int r,int x){ while(l<=r){ int mid=l+r >>1; if(A[mid]==x) return mid; else if(A[mid]<x) r=mid-1; else l=mid+1;...从小到...
  • package 基本算法; import java.util.Arrays; import java.util.Scanner; public class 二分法_1 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner...
  • 7-2求最大值及其下标(20 ) 本题要求编写程序,出给定的n个数中的最大值及其对应的最小下标下标从0开始)。 输入格式: 输入在第一行中给出一个正整数n(1<n≤10)。第行输入n个整数,用空格...
  • * Goal:用二分查找算法出一个数在数组中的下标 * Author:Tang.Mitnick * Site:FaFu * */ //设计思想:对一个数组中的数组进行折半查找,确定给出的数对应的在数组中的下标。 public class BinarySearch { ...
  • 采用二分查找:如果数组中的数字小于下标,由于下标是-1的递减数列,但是数组中的元素差值大于等于-1,因此左边的不可能等于下标。如果数组中的数字大于下标,同理,之后的数字肯定都大于下标,往左边查找。 class ...
  • 对一个不到的数(不在数组里),要是想取相邻的下标里,较大的那个,就要 写成:left=mid+1; right=mid; 要是想取较小的那个下标,就写成:left=mid+1; right=mid-1; 关于这两点知识,写的比较好...
  • 在整型有序数组中查找想要的数字,找到了返回下标不到返回 - 1#include&lt;stdio.h&gt; #include&lt;Windows.h&gt; int binary_search(int arr[], int key, int sz) { int left = 0; int ...
  • 写代码可以在整型有序数组中查找想要的数字, 找到了返回下标不到返回-1.(折半查找) 基本思路: 1.编写一个search函数进行折半查找,定义左值left为数组第一个元素下标,定义右值right为数组的最后一个元素...
  • 题目描述 假设一个单调递增的数组里的每个元素都是整数并且是唯一的。...二分查找,时间复杂度O(log n) 代码 class Solution { public: int getNumberSameAsIndex(vector<int> nums){ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,272
精华内容 508
关键字:

二分找下标