精华内容
下载资源
问答
  • //二分法查找某个数字有序数组中的位置 #include <stdio.h> int main() { int arr[] = { 1,3,4,5,6,7,8,9,23,45,67 }; int sz = sizeof(arr) / sizeof(arr[0]);//数组长度 int n = 45;//要查找的 int ...
    //二分法查找某个数字在有序数组中的位置
    #include <stdio.h>
    int main()
    {
    	int arr[] = { 1,3,4,5,6,7,8,9,23,45,67 };
    	int sz = sizeof(arr) / sizeof(arr[0]);//数组长度
    	int n = 45;//要查找的数
    	int i;
    	int left = 0;
    	int right = sizeof(arr);
    	while( left <= right)
    	{
    		i = (left + right) / 2;
    		if (arr[i] < n)
    		{
    			left = i+1;
    		}
    		else if (arr[i] > n)
    		{
    			right = i-1;
    		}
    		else if (arr[i] = n)
    		{
    			printf("%d在arr[%d]", n, i);
    			break;
    		}
    	}
    	if (left > right)
    	{
    		printf("查无此数\n");
    	}
    	return 0;
    }
    

    使用创建函数的方式:

    • 注意数组的长度的求取需要提前在函数外求取,以为实际传入函数中的数组为数组第一个元素的地址,即为指针,如果用公式 size=sizeof(arr)/sizeof(arr[0])
      的方式,则sizeof(arr)实际为arr[0]所在地址的长度,为4.
    //C语言:创建函数求数组中的数在数组中的位置
    //创建求位置的函数
    int search_location(int arr[],int size,int num)
    {  //注意此处传递进来的为数组的指针,所以求其长度应函数外提前完成。
    	int right = size - 1;
    	int left = 0;
    	int middle=(left+right)/2;
    	for(;left<=right;middle=(left+right)/2)
    	{//等号不能丢,否则左右指向同一个数而其又是所找的数的时候,则不能进入循环,找不到。
    		if (num > arr[middle])
    		{
    			left = middle+1;
    		}
    		else if (num <arr[ middle])
    		{
    			right = middle-1;
    		}
    		else if (num = arr[middle])
    		{
    			return middle;
    		}
    	}
    	return -1;
    }
    //创建主函数
    #include <stdio.h>
    int main()
    {
    	int arr[] = { 1, 2, 3, 4, 56, 100, 667, 3444, 3566, 3777, 4567, 5678, 6789, 7890 };
    	int size=sizeof(arr)/sizeof(arr[0]);
    	int num = 111;
    	int location;
    	location=search_location(arr, size, num);
    	if (location == -1)
    	{
    		printf("没有找到");
    	}
    	else
    	{
    		printf("%d在数组中的位置是arr[%d]\n", num, location);
    	}
    	return 0;
    }
    
    展开全文
  • System.out.print(key+"第一次出现下标为:"); return i; } } return 0; } public static int lastIndex(int[] Arr,int key) { for(int i=Arr.length-1;i>=0;i--) { System.out....
    public class arrFind{
    public static void main(String[] args)
    {
    int [] Arr={10,12,24,-30,10};
    int beginIndex=arrFind.Index(Arr,12);
       System.out.println(beginIndex);
       int lastindex=arrFind.lastIndex(Arr, 10);
       System.out.println(lastindex);
    }
    public static int Index(int[] Arr,int key)
    {
    for(int i=0;i<Arr.length;i++)
    {
    if(Arr[i]==key)
    {
    System.out.print(key+"第一次出现的下标为:");
    return i;
    }
    }
    return 0;
    }
    public static int lastIndex(int[] Arr,int key)
    {
    for(int i=Arr.length-1;i>=0;i--)
    {
    System.out.print(key+"最后一次出现的下标为:");
    return i;
    }
    return 0;
    }
    }
    展开全文
  • 如果找到了要求输出该数在数组中所处的位置;如果找不到 输出“没有找到!” */ public class practice01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println...
    import java.util.Scanner;
    
    /***
     * 输入10个数,保存在一个数组中,在数组中查找某个数,给出是否找
     * 到的信息。如果找到了要求输出该数在数组中所处的位置;如果找不到
     * 输出“没有找到!”
     */
    
    public class practice01 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入10个数");
                int[] ary = new int[10];
                for (int k = 0;k<ary.length;k++){
                    ary[k] = sc.nextInt();
                }
            System.out.println("请输入你要查找的数");
            int b = `sc.nextInt`();
            boolean flag = false;
                for (int i = 0;i<`ary.length`;i++){
                    if(`ary`[i]==b){
                        `System.out.println`("索引位置为"+i);
                        flag = true;
                    }
                }
                if (flag==false){
                    System.out.println("没有找到!");
                }
        }
    }
    
    展开全文
  • 不过现在需要在数组中某个数出现的次数,那么我们就需要找到这个数字在数组中第一次出现的位置,以及最后一次出现的位置,将这两个下标一减再加上1就是我们需要的结果。 找第一次出现的位置时,我们利用二分法找到...

    统计一个数字在排序数组中出现的次数。

      在排序数组中查找一个数,这明显就需要利用二分法。不过现在需要在数组中找某个数出现的次数,那么我们就需要找到这个数字在数组中第一次出现的位置,以及最后一次出现的位置,将这两个下标一减再加上1就是我们需要的结果。

      找第一次出现的位置时,我们利用二分法找到了目标值,它的下标为i,此时还不能停止寻找,我们得判断一下 i - 1 位置上的数是否也是目标值,如果是,那么就继续二分的过程,如果不是,那么我们就找到了这个第一次出现的位置。

      找最后一次出现的位置也是同理,找到目标值后,再判断一下i + 1位置的数是否也是目标值,然后决定是否继续二分。

      代码如下:

    import org.junit.Test;
    
    public class Solution1 {
        public int findFirst(int[] array, int target, int start, int end) {
            if (start > end) {
                return -1;
            }
            int mid = (start + end) / 2;
            int num = array[mid];
            if (num == target) {
                if ((mid > 0 && array[mid - 1] != target) || mid == 0) {
                    return mid;
                } else {
                    end = mid - 1;
                }
            } else if (num > target) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
            return findFirst(array, target, start, end);
        }
    
        // 这里也是给自己一个警示吧,以后写参数列表的时候,越重要的参数,越要往前放,这样出错的概率机会低
        public int findLast(int[] array, int target, int start, int end, int length) {
            if (start > end) {
                return -1;
            }
            int mid = (start + end) / 2;
            int num = array[mid];
            if (num == target) {
                if ((mid < length - 1 && array[mid + 1] != target) || mid == length - 1) {
                    return mid;
                } else {
                    start = mid + 1;
                }
            } else if (num < target) {
                start = mid + 1;
            } else {
                end = mid - 1;
            }
            return findLast(array, target, start, end, length);
        }
    
        public int GetNumberOfK(int[] array, int k) {
            if (array == null) {
                return -1;
            }
            int len = array.length;
            int first = findFirst(array, k, 0, len - 1);
            // start 和 end 是二分的时候的数组下标,取值范围就是(0, len - 1);而length是数组的长度,范围是(1, len)
            int last = findLast(array, k, 0, len - 1, len);
            int result = 0;
            // 考虑目标不在数组中的情况
            if (first != -1 && last != -1) {
                result = last - first + 1;
            }
            return result;
        }
        @Test
        public void test() {
            int[] arr = {1, 1, 2, 2, 3, 5, 5, 9, 9};
            int k = 9;
            int result = GetNumberOfK(arr, k);
            System.out.println(result);
        }
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    展开全文
  • 如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”。 解析:十个整数中可能有多个重复的数字,而且正是你要查找的,此时需要输出全部的位置,如果都查找了,没有找到的话就是没有找到。 ...
  • 题目:一个有序数组中查找>=某个数的最左侧的位置 package com.nsu.search; /** * @program: datastruct * @ClassName NearLeftSearch * @description: 一个有序数组中,找>=某个数最左侧的位置 * @...
  • java数组元素查找: 通过p值来判断是否找到:for循环判断用户输入值是否和其中元素相等, 只要有相等值,p就会被下标赋值,而下标i>=0,所以p>=0.只要是P被赋值了,说明其中肯定有相同元素;p没有被...
  • 题目描述数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。解题思路对于目标t,由当前位置a[index]比较开始,下一个可能位置为index = abs(t-a[index]),因为要找出所有的...
  • 现给定一个这样数组,在数组中查找某个数。如果找到,返回下标,否则返回-1; 思路: 思路1: 考虑一个旋转有序数组特点:前面部分是递增,后面部分也是递增,即先后两部分都为递增有序数组,因此可以用...
  • 编写代码一个整形有序数组中查找具体的某个数 我们如何一个整形数组中找到某个具体数呢?今天跟大家分享一个二分查找算法,二分查找又称折半查找。首先,假设表中元素是按升序排列,将表中间位置记录关键字...
  • 实现折半查找int binsearch(int x,int v[],int n),该函数用于...如果v中包含x,则函数返回xv中的位置(介于0~n-1之间的一个整数);否则函数返回-1。#include<stdio.h> intbinsearch(intx,intv[],intn) ...
  • 首先,假设表元素是按升序排列,将表中间位置记录关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录关键字大于查找关键字,则进一步查找前...
  • 二分查找指定元素 /* * 需求: * 给定一个数组,判断是否包含某个值,如果包含则返回其下标,否则返回-1 * 顺序查找: * 1 遍历,循环比较 * 2 如果有和目标元素相等,返回下标 ...* 3 用于查找固定有序的数 * 实现: *
  • 注: 题目: 统计一个数字排序数组中出现的次数。...排序数组中的搜索问题,首先想到 二分法 解决。 排序数组 nums 中的所有数字 target 形成一个窗口,记窗口的 左 / 右边界 索引分别为 left 和 right ,分别对
  • 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。 思路: 很明显,在数组中寻找某个数的复杂度为O(n),但在某些特殊数组中,可以通过寻找规律来减少比较次数。 上述数组的规律就是:相邻元素相差1,奇偶交替...
  • 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。 2.解题思路 这道题目最差时间复杂度也是O(N),所以重点在于能不能找到一种尽可能减少比较次数的方法。 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置...
  • C# 数组查找

    千次阅读 2017-02-27 10:19:47
    产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成,并实现查找某个数字在数组中的位置,如果该数字在数组中不存在,则输出-1。(分别用遍历和二分查找方式实现)。  int[] randomArray10 =...
  • 题目描述 ...要统计某个数字出现的次数,那么就需要找到第一次出现的位置和最后一次出现的位置,采用二分查找的方法进行查找 public class Test21 { public int GetNumberOfK(int [] array , int k) {...
  • 一.问题来源及描述  今天看了July的微博,发现了七月问题...如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。 二.算法分析及实现  这道题目最差时间复杂度也是O(N)(递增或者递减的情况),所以重点在于能不能...
  • 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置。 思路:对于目标target来说,当前如果是和它相等的话,那么最起码需要跳abs(target-A[i]),因为如果不是递增或者递减的话,而是波动的话,那么它最起码要在...
  • 这一题理解起来还是比较简单的,就是找到某个数字在数组中的最开始和最后的位置。 关键思路:两次 二分法。 1. 初步想法 我自己在做的时候,就想得很简单。首先题目要log(n)的时间复杂度,那么很容易想到二分法。...
  • 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 326
精华内容 130
关键字:

查找某个数在数组中的位置