日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在数组中找到第 k 小的数

發(fā)布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在数组中找到第 k 小的数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在數(shù)組中找到第 k 小的數(shù)
【要求】

如果 arr 長度為 N,要求時間復(fù)雜度為 O(N),額外空間復(fù)雜度為 O(1)。


public static int[] getMinKNumByHeap(int[] arr, int k){if(k < 1 || k > arr.length){return arr;}int[] kHeap = new int[k];for(int i = 0; i != k; i++){heapInsert(kHeap, arr[i], i);}for(int i = k; i != arr.length; i++){if(arr[i] < kHeap[0]){kHeap[0] = arr[i];heapify(kHeap, 0, k);}}return kHeap; }public static void heapInsert(int[] arr, int value, int index){arr[index] = value;while(index != 0){int parent = (index - 1) / 2;if(arr[parent] < arr[index]){swap(arr, parent, index);index = parent;}else{break;}} }public static void heapify(int[] arr, int index, int heapSize){int left = index * 2 + 1;int right = index * 2 + 2;int largest = index;while(left < heapSize){if(arr[left] > arr[index]){largest = left;}if(right < heapSize && arr[right] > arr[largest]){largest = right;}if(largest != index){swap(arr, largest, index);}else{break;}index = largest;left = index * 2 + 1;right = index * 2 + 2;} }public static int[] getMinKNumByBFPRT(int[] arr, int k){if(k < 1 || k > arr.length){return arr;}int minKth = getMinKthByBFPRT(arr, k);int[] res = new int[k];int index = 0;for(int i = 0; i != arr.length; i++){if(arr[i ] < minKth){res[index++] = arr[i];}}for(; index != res.length; index++){res[index] = minKth;}return res; } public static int getMinKthByBFPRT(int[] arr, int K){int[] copyArr = copyArray(arr);return select(copyArr, 0, copyArr.length - 1; k - 1); }public static int[] copyArray(int[] arr){int[] res = new int[arr.length];for(int i = 0; i != res.length; i++){res[i] = arr[i];}return res; }public static int select(int[] arr, int begin, int end, int i){if(begin == end){return arr[begin];}int pivot = medianoOfMedians(arr, begin, end);int[] pivotRange = partition(arr, begin, end, pivot);if(i >= pivotRange[0] && i <= pivotRange[1]){return arr[i];}else if(i < pivotRange[0]){return select(arr, begin, pivotRange[0] - 1, i);}else{return select(arr, pivotRange[1] + 1, end, i);} }public static int medianoOfMedians(int[] arr, int begin, int end){int num = end = begin + 1;int offset = num % 5 == 0 ? 0 : 1;int[] mArr = new int[num / 5 + offset];for(int i = 0; i < mArr.length; i++){int beginI = begin + i *5;int endI = begin + 4;mArr[i] = getMedian(arr, beginI, Math.min(end, endI));}return select(mArr, 0, mArr.length - 1, mArr.length / 2); }public static int[] partition(int[] arr, int begin, int end, int pivotValue){int small = begin - 1;int cur = begin;int big = end + 1;while(cur != big){if(arr[cur] < pivotValue){swap(arr, ++small, cur++);}else if(arr[cur] > pivotValue){swap(arr, cur, --big);}else{cur++;}}int[] range = new int[2];range[0] = small + 1;range[1] = big - 1;return range; }public static int getMedian(int[] arr, int begin, int end){insertionSort(arr, begin, end);int sum = end + begin;int mid = (sum / 2) + (sum % 2);return arr[mid]; }public static void insertionSort(int[] arr, int begin, int end){for(int i = begin + 1; i != end + 1; i++){for(int j = i; j != begin; j--){if(arr[j - 1] > arr[j]){swap(arr, j - 1, j);}else{break;}}} }public static void swap(int[] arr, index1, int index2){int tmp = arr[index];arr[index1] = arr[index2];arr[index2] = tmp; }

總結(jié)

以上是生活随笔為你收集整理的在数组中找到第 k 小的数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 永久免费精品影视网站 | 国产女主播喷水视频在线观看 | 国产swag在线观看 | 手机看片91 | 最新天堂中文在线 | 成人a网站 | 亚洲第一视频在线播放 | www.久久久久| 91av看片 | 久久久精品一区二区涩爱 | 九九热伊人 | 欧美成人吸奶水做爰 | 夜间福利在线观看 | 亚洲成人视屏 | 精品久久99 | 精品国产乱码久久久久久免费 | 777黄色| 草莓视频在线观看18 | 人妻中文字幕一区二区三区 | www.麻豆av| 狠狠躁 | 国产精品久久久久毛片软件 | 欧美日韩看片 | 成人免费看片在线观看 | 人妻天天爽夜夜爽一区二区三区 | 欧美日韩国产区 | 一级片在线播放 | 新版红楼梦在线高清免费观看 | 丁香色综合 | 日韩精品人妻一区二区中文字幕 | 绿帽单男 | 丝袜诱惑一区 | 亚洲av综合色区无码一区爱av | 三级视频在线看 | 久久精品网址 | 中国少妇av| 这里只有久久精品 | 亚洲高清色图 | 欧美一级大黄 | 中文字幕日韩一区 | xx视频在线观看 | 中文字幕av一区二区三区人妻少妇 | 人人爽人人爽人人爽人人爽 | 欧美日韩一区二区三区在线视频 | 最近免费中文字幕中文高清百度 | 国产精品国产一区二区 | 色呦呦一区二区三区 | 中文字幕一区二区在线观看 | 精品一区二区三区免费毛片 | 亚洲精品www久久久久久 | 在线看a网站 | 黄色午夜影院 | 国产精品啊啊啊 | jlzzjlzz亚洲日本少妇 | 91国产视频在线观看 | 国产美女引诱水电工 | 污黄网站在线观看 | 一道本不卡视频 | 中文字幕精品无 | 黑人干亚洲女人 | 人妻视频一区二区三区 | 中国一级片黄色一级片黄 | 国产裸体无遮挡 | 一区二区三区日本视频 | 国产成人精品一区二区三区在线观看 | 中文在线免费看视频 | 成人午夜精品 | 国产资源一区 | 中文字幕+乱码+中文乱码91 | 亚洲午夜精品久久久久久app | 国产乱码精品一区二三赶尸艳谈 | 先锋av资源网 | 国产毛片一区二区三区va在线 | 欧美乱妇日本无乱码特黄大片 | 少妇人妻偷人精品一区二区 | 国产精品久久二区 | 国产一区二区三区精品在线 | 美女的隐私免费看 | 床戏高潮做进去大尺度视频 | 日本一级网站 | 亚洲天堂手机在线 | 久久99国产精品 | 欧美性在线视频 | 欧美一级免费在线 | 欧美日韩六区 | 97香蕉超级碰碰久久免费软件 | 激情网页 | 97久久综合 | 六月婷婷中文字幕 | 天天干干天天 | 欧美激情成人在线 | 七月婷婷综合 | 国产强被迫伦姧在线观看无码 | 91在线观 | 国产激情视频一区二区 | 99久久久无码国产精品免费 | www.插插 | 好男人网站| 亚洲精品国产免费 |