精华内容
下载资源
问答
  • 统计一个数字排序数组中出现的次数代码解法一 /** * 暴力求解,直接遍历 * @param array * @param k * @return */ public static int findAppearCountInArrayOfK(int[] array, int k) { if (array == nul.....

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

    代码

    解法一

        /**
         * 暴力求解,直接遍历
         * @param array
         * @param k
         * @return
         */
        public static int findAppearCountInArrayOfK(int[] array, int k) {
            if (array == null || array.length == 0) {
                return 0;
            }
            int count = 0;
            for (int i = 0; i < array.length; i++) {
                if (array[i] == k) {
                    count++;
                }
            }
            return count;
        }
    
        public static void main(String[] args) {
            int[] array = {1, 2, 3, 3, 3, 3};
            int c = findAppearCountInArrayOfK(array, 3);
            System.out.print(c);
        }

    解法二

        /**
         * 基于二分查找,分别查找开始和结束位置,求差
         * @param array
         * @param k
         * @return
         */
        public static int findAppearCountInArrayOfK2(int[] array, int k) {
            if (array == null || array.length == 0) {
                return 0;
            }
            int first = findFirstIndexOfK(array, k);
            int last = findLastIndexOfK(array, k);
            if (first > -1 && last > -1) {
                System.out.println(first + " - " + last);
                return last - first + 1;
            }
            return 0;
        }
    
        /**
         * 求k的开始位置
         * @param array
         * @param k
         * @return
         */
        private static int findFirstIndexOfK(int[] array, int k) {
            int low = 0;
            int high = array.length - 1;
            int middle = 0;
            int middleData = 0;
            while (low <= high) {
                // 计算中点
                middle = (low + high) / 2;
                // 得到中位数
                middleData = array[middle];
                if (middleData == k) {
                    // 如果中位数等于目标值
                    // 此时如果中点恰恰是数组的起始位置,说明前面没有元素,则直接返回该位置
                    // 如果前面还有元素,并且不等于目标值,说明当前位置就是目标值的开始位置,直接返回
                    // 都不满足,说明没有找到,则修改数组搜索范围的high,以当前数组的中点为界,二分查找左侧子数组
                    if (middle == 0 || array[middle - 1] != k) {
                        return middle;
                    } else {
                        high = middle - 1;
                    }
                } else if (middleData > k) {
                    // 如果中位数大于k,说明k在左侧子数组中,继续下一次二分查找
                    high = middle - 1;
                } else {
                    // 如果中位数小于k,说明k在右侧子数组中,继续下一次二分查找
                    low = middle + 1;
                }
            }
            return -1;
        }
    
        private static int findLastIndexOfK(int[] array, int k) {
            int low = 0;
            int high = array.length - 1;
            int middle = 0;
            int middleData = 0;
            while (low <= high) {
                middle = (low + high) / 2;
                middleData = array[middle];
                if (middleData == k) {
                    // 如果中位数等于目标值
                    // 此时如果中点恰恰是数组的结束位置,说明后面没有元素,则直接返回该位置
                    // 如果后面还有元素,并且不等于目标值,说明当前位置就是目标值的结束位置,直接返回
                    // 都不满足,说明没有找到,则修改数组搜索范围的low,以当前数组的中点为界,二分查找右侧子数组
                    if (middle == array.length - 1 || array[middle + 1] != k) {
                        return middle;
                    } else {
                        low = middle + 1;
                    }
                } else if (middleData > k) {
                    // 如果中位数大于k,说明k在左侧子数组中,继续下一次二分查找
                    high = middle - 1;
                } else {
                    // 如果中位数小于k,说明k在右侧子数组中,继续下一次二分查找
                    low = middle + 1;
                }
            }
            return -1;
        }
    
    
        public static void main(String[] args) {
            int[] array = {1, 2, 3, 3, 3, 3};
            int c = findAppearCountInArrayOfK2(array, 3);
            System.out.print(c);
        }
    展开全文
  • 功能:对输入的数组进行排序返回的是,从小到大数组对应于原数组的下标...思想:在函数中动态开辟一个数组,用于存储下标。初始化的时候为0-(n-1)。数组值排序的过程中,下标值也跟着排序。最后返回指向下标数组
      
    

    功能:对输入的数组进行排序,返回的是,从小到大数组对应于原数组的下标(序号) 。比如 1 7 3 2 9  返回:0 3 2 1 4

     

    思想:在函数中动态开辟一个数组,用于存储下标。初始化的时候为0-(n-1)。数组值在排序的过程中,下标值也跟着排序。最后返回指向下标数组的指针。

    #include<stdio.h>
    #include<malloc.h>

    int *sortindex(int a[],int n)
    {
     int *p;
     int temp;
     p=(int*)malloc(sizeof(int)*n);
     for(int i=0;i<n;i++)
      p[i]=i;

     for(i=0;i<n;i++)
      for(int j=0;j<n;j++)
       if(a[j]>a[j+1])
       {
        temp=a[j];
        a[j]=a[j+1];
        a[j+1]=temp;

        temp=p[j];
        p[j]=p[j+1];
        p[j+1]=temp;
       }

       for(i=0;i<n;i++)
        printf("%3d",p[i]);
       printf("\n");
       return p;
       free(p);


    }

    void main()
    {
     int a[5]={1,7,3,2,9};
     int *p;
     for(int i=0;i<5;i++)
      printf("%3d",a[i]);
     printf("\n");
     p=sortindex(a,5);
     for(i=0;i<5;i++)
      printf("%3d",p[i]);
     printf("\n");
    }

     

     

    运行结果:

      1  7  3  2  9
      0  3  2  1  4
      0  3  2  1  4

    展开全文
  • JAVA去掉一个排序数组的重复数字

    千次阅读 2008-11-10 05:55:00
    原文地址:http://www.java2000.net/p11764论坛讨论地址:http://topic.csdn.net/u/20081109/14/EB2F41BF-52C3-4F9A-A7AD-F590A83887CC.html我的.../** * JAVA去掉一个已经排好序的数组的重复数字,尽量快. * * 
    原文地址:http://www.java2000.net/p11764
    

    论坛讨论地址: http://topic.csdn.net/u/20081109/14/EB2F41BF-52C3-4F9A-A7AD-F590A83887CC.html

    我的一个方案,不过肯定有提升速度的地方
    1. import java.util.Arrays;

    2. /**
    3.  * JAVA去掉一个已经排好序的数组的重复数字,尽量快.
    4.  * 
    5.  * @author 老紫竹 JAVA世纪网(java2000.net)
    6.  * 
    7.  */
    8. public class Test {

    9.   public static void main(String args[]) {
    10.     int[] arr = { 1223344555667899101111,
    11.         11121213141415 }; // 预设数据数组
    12.     int index = 1// 保存最后一个不重复的位置
    13.     int last = arr[0];
    14.     for (int i = 1; i < arr.length; i++) {
    15.       if (arr[i] != last) {
    16.         arr[index] = arr[i];
    17.         last = arr[index];
    18.         index++;
    19.       }
    20.     }
    21.     int[] rtn = new int[index];
    22.     System.arraycopy(arr, 0, rtn, 0, index);
    23.     System.out.println(Arrays.toString(rtn));
    24.   }
    25. }

    特别是步长的部分。

    展开全文
  • 数组排序,并返回排序后的数组对应原数组的下标 用b数组来记录下标位置 #include<stdio.h> #include<iostream> #include<stdlib.h> using namespace std; void sort(int* a, int length, int* b) ...

    数组排序,并返回排序后的数组对应原数组的下标

    用b数组来记录下标位置

    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    void sort(int* a, int length, int* b)
    {
        int i,j, t1, t;
        for(j=0; j<length; j++)
            for(i=0; i<length-1-j; i++)
                if(a[i]<a[i+1])
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                    t1=b[i];
                    b[i]=b[i+1];
                    b[i+1]=t1;
                }
    }
    int main()
    {
        int a[] = {8,6,3,0,4,0,5};
        int b[7] = {0,1,2,3,4,5,6};//用来保存原数组对应的下标以及排序后的下标
        sort(a, 7, b);
        cout<<"排序后的数组为:"<<endl;
        for(int i=0; i<7; i++)
            cout<<a[i]<<" ";
        cout<<endl;
      cout<<"排序后的数组对应的下标:"<<endl;
        for(int i=0; i<7; i++)
             cout<<b[i]<<" ";
       cout<<endl;
        return 0;
    }
    
    

    输出结果

    展开全文
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。2. 数组声明创建首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:dataType[] arrayRefVar; //首选的方法//或...
  • * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的即可 * 将给定数组排序 * @param arr int整型数组排序数组 * @return int整型数组 */ public int[] MySort (int[] arr)...
  • 每日算法(十五)-java给定一个有序数组,删除其中重复元素,只保留一个,并返回数组的长度 Example 2: Given nums = [0,0,1,1,1,2,2,3,3,4], Your function should return length = 5, with the first five ...
  • 给定一个数组,请你编写一个函数,返回数组排序后的形式。 题目分析: 方法一: function evlabc(a){//排序大小 var i = j = t = 0; for (i = 0; i < a.length; i++){ for (j = 0; j < a.length; j++){ if ...
  •  在JAVA中对数组排序或list元素排序,JAVA提供了Arrays.sort()及Collections.sort(),使用者只要正确调用即可,不需要使用者自己写排序算法的实现。当然如果数据量大,并且要求效率高的话,还是需要自己选择适当...
  • 统计一个数字在升序排序数组中出现的次数。 思路: 涉及到在已经排好序的数组中找元素,很自然的就想到了二分查找法 代码中需要注意的地方: 二分查找法很容易边界选择错误,可以具体举例进行测试,以便修改...
  • 数组排序(Arrays.sort) 当遇到数组排序时,我们经常会使用学过的几种排序方法,而java 本身提供了Arrays.sort,在数据元素较少或者对效率要求不是抬高时,直接使用Arrays.sort来的更容易。查看一下源码后...
  • 这段时间有些忙,今天空闲出来给大家分享下Java中常用的数组排序算,有冒泡排序、快速排序、选择排序、插入排序、希尔算法、并归排序算法、堆排序算法,以上排序算法中,前面几种相对后面的比较容易理解一些。...
  • 1.前一段时间遇到一个面试题,输入四个数字排序后用String返回 例如输入:9,4,10,5用string返回输出4,5,9,10 public String funSort(int p1,int p2,int p3,int p4)  {  int[] array ={p1,p2,p3,p4};  for(int ...
  • 注: array.length 代表数组长度 length代表的就是长度 ... 例如:封装一个函数 传入数字1 返回数字2 返回二... public static void main(String[] args) { System.out.println(fun(3)); } public st
  • 给定一个排序数组,使用就地算法将重复的数字移除,使数组中的每个元素只出现一次,返回数组的长度。 不能为数组分配额外的空间,你必须使用常熟级空间复杂度的就地算法。 例如, 给定输入数组A=[1,1,2], ...
  • Java日报 部门:**大数据开发六部 姓名:cqmfx(阡陌飞絮) 日期:2020.10.25 备注:部分转自百度,CSDN,菜鸟,侵权删 大纲 数组介绍 二、排序 数组那些事
  • leetcode解题之4. Median of Two Sorted Arrays java (两个排序数组的中位数)
  • 题目类似于:对一个乱序数组不使用排序算法,但是得到倒数第二个值/得到中位数/得到第n个值之类的问题,成功勾引起了我的兴趣。想了想,然后又面向搜索引擎很久,终于找到了解决方案。还是使用合适的数据结构来解决...
  • int arr[]= {99,11,33,22,66,55,100}; int len=arr.length; for(int i=0;...//最大的索引 int max=arr[index_max];//假定的最大 for(int j=i;j<len;j++) { if(max<ar...
  • 给定一个整形数组arr,返回排序后的相邻两数的最大差值。 时间复杂度为O(N)。 解答: 如果用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想(不是桶排序),可以做到O(N),额外空间复杂度为O(N)。遍历...
  • 输入一个整数数组,实现一个函数来调整该数组数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路一:从前向后找,找到...
  • Arrays类实现数组升序排序的方法: Java类库提供了Arrays类,该类在 Java.util 包中 ,所以使用时要引入该类;...Arrays类实现数组升序排序方法: public static void sort( double a[ ] ) ; ...
  • java数组里插入一个数并排序

    千次阅读 2019-10-21 15:00:45
    准备一个数组(插入一个数,长度比老数组大一),循环遍历老数组,将老数组的前面赋值给新数组 把新数插入到新数组数组操作类排序,循环输出即可 */ public static void sortshuzu(int[] arrs,int t){ ...
  • JAVA数组排序——二分(折半)查找/** * *Title: project_name *Description: 对数组的二分查找 *Makedate:2016年5月1日 下午2:57:19 *@author: sunt Email:wnst1990@126.com *@version: 1.0 */ public class...
  • 一个快速排序的程序。Java、Python、js、go、c都可以 Java实现数组的快速排序(快速排序算法) &lt;a class="follow-nickName" href="...
  • 本题为剑指offer面试题38 牛客网测试地址:... 时间限制:1秒空间限制:32768K 统计一个数字排序数组中出现的次数。 package go.jacob.day512; public class Demo
  • java取出一个数组中第二大的数字

    千次阅读 2016-12-12 15:12:13
    //取出一个数组中第二大的数字 //思路:先将数组从小到大排序,然后取出倒数第二个数字 import java.util.*; class second_max { public static void main(String args[]) { //int[] b = new int[]; int[] b={3,...
  • 最近面试遇到需要输出一个数组
  • 数组排序、查找

    2016-09-18 15:18:52
     冒泡排序:相邻两个数组元素之间进行比较,交换相互位置,每排一次都有一个最小值或最大出现。  选择排序:每一轮都选择一个数组位置作为数组元素比较的最小值的存放位置。  插入排序:假设一个排序的元素...
  • 比如,一个数组为:[1, 1, 3, 5, 6, 6, 6, 8, 8, 9, 2, 8, 3 ]同时符合最大且次数最多的就是8。 思路:最简单的办法就是采用两层for循环去遍历,时间复杂度为O(n2),其次可以 先用快速排序将数组排序,然后再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,413
精华内容 28,965
关键字:

java返回一个数字数组的排序值

java 订阅