精华内容
下载资源
问答
  • 题目: 这样的数组中查找一个数字是否存在 要求:时间复杂度小于O(N) 数组: 1 2 3 1 3 4 1 2 3 2 3 4 2 4 5 4 5 6 3 4 5 4 5 6 7 8 9 解题思路: 什么是时间复杂度?通俗来讲就是哪种方法越简单,...

    【杨氏矩阵 】有一个二维数组
    数组的每行从左到右是递增的,每列从上到下是递增的
    题目: 在这样的数组中查找一个数字是否存在
    要求:时间复杂度小于O(N)

    数组:
    1 2 3  1 3 4  1 2 3
    2 3 4  2 4 5  4 5 6
    3 4 5  4 5 6  7 8 9
    解题思路:
    什么是时间复杂度?通俗来讲就是哪种方法越简单,系统计算次数越少,那么时间复杂度就越简单,所用的时间也就越少。

    下面的代码:第一行最后一个数字和想要找的数字比较,如果第一行最后的那个数字大,则就在第一行找。如果第一行的最后那个数字小,那么就行数加一,列数不变,想要找的那个数和第二行的最后一列比较…按照此方法下去,直到找到那个数字。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int Find_finger(int arr[][3],int find)
    {
    	int row = 0;
    	int col = 2;
    	while ((col >= 0) && (row <= 2))
    	{
    		if (arr[row][col] == find)
    		{
    			return 1;
    		}
    		else if (arr[row][col] < find)
    		{
    			++row;
    		}
    		else
    		{
    			--col;
    		}
    		return 0;
    	}
    
    //以下这种方法也可以找到,但是复杂度可能要比第一种高。
    	//for (int row = 0; row < 3; ++row)
    	//{
    	//	for (int col = 0; col < 3; ++col)
    	//	{
    	//		if (arr[row][col] == find)
    	//		{
    	//			return 1;
    	//		}		
    	//	}
    	//}
    	//return 0;
    }
    
    int main()
    {
    	int arr[3][3] = { 1,2,3,2,3,4,3,4,5 };
    	int find = 0;
    	printf("请输入需要查找的数:\n");
    	scanf("%d", &find);
    
    	if (Find_finger(arr,find))
    	{
    		printf("找到了!\n");
    	}
    	else
    	{
    		printf("没找到!\n");
    	}
    
    
    	system("pause");
    	return 0;
    }
    
    展开全文
  • 在数组中查找数字

    2019-06-24 16:59:41
    整型有序数组中查找想要的数字,查到了返回下标(折半查找) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(){ int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; ...

    在整型有序数组中查找想要的数字,查到了返回下标(折半查找)

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    int main(){
    	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    	int num;
    	scanf("%d", &num);
    	int left = 0;
    	int right = 10;
    	while (left <= right){
    		int mid = (left + right) / 2;
    		if (num < arr[mid]){
    			right = mid - 1;
    		}
    		else if (num>arr[mid]){
    			left = mid + 1;
    		}
    		else{
    			printf("%d\n", mid);
    			break;
    		}
    		if (left == right){
    			printf("没找到!\n");
    		}
    	}
    	system("pause");
    	return 0;
    }
    

    本代码主要理解折半查找得思想,首先定义变量(left right)来表示当前你查找范围的边界,用mid来表示查找范围的中间值,把你需要查找的数与mid相比较,如果小于则舍弃[mid,right],如果大于则舍弃[left,mid],直到你要查找的数与mid相等.也要考虑没有得状况

    展开全文
  • 题目一:输一个递增排序的数组和一个数字 s,在数组中查找两个使得它们的 和正好是 s。如果有多对数字的和等于 s,输出任意一对即可。例如:输入数组 {1,2,4,7,11,15}和数字为 15.输出 4 和 11. 思路:不考虑...
    面试题:和为 s 的两个数字 VS 和为 s 的连续正数序列
    题目一:输一个递增排序的数组和一个数字 s,在数组中查找两个数使得它们的
    和正好是 s。如果有多对数字的和等于 s,输出任意一对即可。例如:输入数组
    {1,2,4,7,11,15}和数字为 15.输出 4 和 11.
    思路:不考虑时间复杂度的话
    因为是递增数组,则定位起始位置,start以及end
    若两个起始位置各自对应的数组元素的和小于指定的数,则start+1
    否则end-1
    public class ArrayTwoElementSumEqualNum_1 {
    	public static void main(String[] args){
    		int[] a={1,2,4,7,11,15};
    		find(a,15);
    	}
    	public static void find(int[] arr,int num)throws RuntimeException
    	{
    		
    		if(num<=arr[0]||num>=arr[arr.length-1]||arr.length<2||arr==null)
    			System.out.println("输入错误");
    		int start=0,end=arr.length-1;
    			while(start<end){
    				int temp=arr[start]+arr[end];
    				if(temp>num)
    					end--;
    				if(temp<num)
    					start++;
    				if(temp==num){
    					System.out.println("这两个元素是"+arr[start]+"和"+arr[end]);
    					break;
    				}
    		}
    	}
    			

    展开全文
  • 在数组中查找一个并返回其下标

    千次阅读 2018-07-13 18:58:27
    /** * 指定的数组中查找指定的元素并返回下标 * */public interface ThreadLookupAlgorithm {//线程查找public int find(int[] arr,int data);//二分查找public int findBinary(int[] arr,int left,int right,in...
    


    package algorithm.sort.dao;
    /**
     * 在指定的数组中查找指定的元素并返回下标
     * */
    public interface ThreadLookupAlgorithm {
    //线程查找
    public int find(int[] arr,int data);
    //二分查找
    public int findBinary(int[] arr,int left,int right,int data);
    }

    package algorithm.sort.imp;

    import algorithm.sort.dao.ThreadLookupAlgorithm;

    public class ThreadLookupAlgorithmImp implements ThreadLookupAlgorithm {

     //线性查找
     @Override
     public int find(int[] arr, int data) {
      for(int i = 0;i<arr.length;i++){
       if(data == arr[i]){
        return i;
       }
      }
      //习惯上使用-1表示查找失败
      return -1;
     }
     //二分查找
     @Override
     public int findBinary(int[] arr, int left, int right, int data) {
      //数组中至少有1个元素才需要查找
      if(left <= right){
       //1.计算中间的下标并记录
       int p = (left+right)/2;
       //2.使用目标元素与中间元素比较大小,若相等则直接返回下标代表查找成功
       if(data == arr[p]){
        return p;
       }
       //3.若目标元素小于中间元素,则去中间元素的左边查找,重复上述过程,使用递归
       else if(data < arr[p]){
        return findBinary(arr, left, p-1, data);
       }
       //4.若目标元素大于中间元素,则去中间元素的右边查找
       else{
        return findBinary(arr, p+1, right, data);
       }
      }
      //若执行到left不再小于等于right时,表示查找失败
      return -1;
     }

    }

    package com.fl.test;

    import algorithm.sort.dao.ThreadLookupAlgorithm;
    import algorithm.sort.imp.ThreadLookupAlgorithmImp;

    public class LookupAlgorithm {

     public static void main(String[] args) {
      
      ThreadLookupAlgorithm threadLookupAlgorithm = new ThreadLookupAlgorithmImp();
      int[] brr ={10,20,30,40,50};
      int num = 10,number = 30;
      int res1 = threadLookupAlgorithm.findBinary(brr, 0, 4, number);
      int res = threadLookupAlgorithm.find(brr, num);
      if(res != -1){
       System.out.println(num+"在数组中出现的位置是:"+res);
      }else{
       System.out.println(num+"在数组中不存在!");
      }
      if(res != -1){
       System.out.println(num+"在数组中出现的位置是:"+res1);
      }else{
       System.out.println(num+"在数组中不存在!");
      }
     }

    }



    展开全文
  • 一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 时间...
  • 二维数组中查找一个

    千次阅读 2016-05-06 17:03:57
    题目:一个二维数组中,每一行都按照从左到右递增的顺序,每一列都按照从上到下递增的顺序排序,编写一个函数,输入这样的一个二维数组和一个整数。判断该整数是否二位数组。 思路
  • 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字M,输出任意一对即可。 例如输入数组1、2、4...
  • 剑指offer53.1——排序数组中查找数字(LeetCode34:排序数组中查找元素的起始位置):思路分享 《剑指offer》题目和LeetCode主站本质是一样的,想要找到target数目,也需要找到左右边界 题目解析: 一个...
  • 文章目录面试题53:排序数组中查找数字一、题目描述二、问题分析三、问题解答 面试题53:排序数组中查找数字 一、题目描述 问题(1) 数字排序数组中出现的次数 统计一个数字排序数组中出现的次数。 例如...
  • 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个,使得它们的和正好是输入的那个数字。 要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组 1、2、4、...
  • 长度为n的一维数组A数组元素为互不相同的 整型。若存在这样的x,它大于它左侧所有小于右侧所有,则称x为A的一个中间。例如: 若数组A={3, 1, 6, 4, 5, 7, 9, 8, 10, 14, 12},则A有 中间7...
  • 一个按行列递增的二维数组中查找一个是否存在
  • 一个有序的数组中查找具体的某个数字n,编写功能:v[0]<=v[1]<…<v[n-1]的数组中查找数字的下标 思路(一) 我们先定义一个有序的数组arr,再设置一个数组中的一个数字k为我们所寻找的值,当数字与算法...
  • array[mid]){//如果目标值小于当前Mid下标位置的值 则前半区查找 right=mid-1; }else{//反之后半区查找 left=mid+1; } } return -1; } public static void main(String[] args) { int[] array=new int...
  • [剑指Offer]-排序数组中查找数字

    千次阅读 2019-05-18 18:21:06
    统计一个数字排序数组中出现的次数。{1,2,3,3,3,3,4,5} 3出现了4次。 解题思路 当然可以无脑用哈希表或者直接遍历,空间复杂度O(n),时间复杂度O(1)代码略 优化:找第一个k时,首先也是二分找到中间的k...
  • 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15...
  • 一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析:...
  • 折半查找是搜索方法比较简单的方法,折半查找法虽然比较容易上手,效率比较高,可是局限性比较大,需要有序数组中查找。 折半查找法就是用你所要查找的数值与中点元素am比较,若X等于am,即找到,停止查找;否则...
  • 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字M,输出任意一对即可。 例如输入数组1、2、4、7...
  • 二维数组中查找是否存在一个

    千次阅读 2016-11-21 15:53:03
    一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增...如果这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。 1 2 8 9 2 4 9 12 4 7 10 13
  • 这样的数组中查找一个数字是否存在。要求:时间复杂度小于O(N); 这里我说一下我解题的各种逻辑和方法。 一看到这个题目,最开始的时候,我是这样想的:利用循环直接遍历数组中的每一个就行了呀! 可是...
  • 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个,使得它们的和正好是输入的那个数字。要求算法的时间复杂度O(n). #include #include #include //输入的数据小于100 void printSum(int a[],int ...
  • 在数组中查找两个,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 分析: 通过设置数组首尾指针,i = 0, j = len -1,  因为数组是有序...
  • 二维数组中查找元素

    千次阅读 2016-10-05 16:58:50
    二维数组中查找元素
  • 一个有序的数组中查找小于某个的个数 [1, 2, 3, 4] 2 // 1 二分查找 let searchInsert = function (arr, x) { let left = 0; let right = arr.length - 1; while (left <= right) { let mid = (left ...
  • JavaScript 专题(九)数组中查找指定元素

    万次阅读 多人点赞 2020-11-12 18:05:23
    上一篇文章,我们了解了数组扁平化的思想,并学习了 lodash 是如何处理数组扁平化的。 这次我们来讨论**在数组中查找元素**时所用的一些方法,并且参考lodash来实现我们自己的工具方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,781
精华内容 70,312
关键字:

在数组中查找小于60的数