选择问题
来源:互联网 发布:知豆电动汽车官方网站 编辑:程序博客网 时间:2024/06/06 01:38
选择问题
一、含义
当有一组N个数需要确定其中第k个最大者,这样的问题可看成为选择问题。
二、求解算法
1、解法一:首先将这N个数先读入一个数组中,再通过某种算法(如冒泡排序法等)以递增顺序将数组排序,最后返回位置k上的元素。
下面实现的核心代码
public class GetKValuesTest1 { public static void main(String[] args) { int[] nums = {1 ,3, 5, 0, 9, 2, 9}; System.out.println("getKValues = " + getKValues(nums, 5)); } private static int getKValues(int[] nums, int k) { if (nums == null || nums.length <= 0) { throw new RuntimeException("数组无数据"); } if (k < 1 || k >= nums.length) { throw new RuntimeException("k值无效"); } return bubblingSort(nums)[k - 1]; } private static int[] bubblingSort(int[] nums) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { int temp; if (nums[i] > nums[j]) { temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } } } return nums; }}
2、解法二:先把前k个元素读入数组并(以递增的顺序)对其排序。接着,将剩下的元素再逐个读入。当新元素读入时,如果它小于数组中的第k个元素则忽略之,否则就将其放到数组中的正确位置上,同时将数组中的一个元素挤出数组。当算法终止时,位于第k个位置上的元素作为答案返回。
public class GetKValuesTest2 { public static void main(String[] args) { int[] nums = {1 ,3, 5, 0, 9, 2, 9, 7, 12, 4, 6}; System.out.println("getKValues = " + getKValues(nums, 5)); } private static int getKValues(int[] nums, int k) { if (nums == null || nums.length <= 0) { throw new RuntimeException("数组无数据"); } if (k < 1 || k >= nums.length) { throw new RuntimeException("k值无效"); } int[] numsk = new int[k]; for (int i = 0; i < k; i++) { numsk[i] = nums[i]; } numsk = bubblingSort(numsk); for (int i = k; i < nums.length; i++) { if (nums[i] < numsk[k-1]) { numsk = compareNum(numsk, nums[i]); } } return numsk[k-1]; } private static int[] bubblingSort(int[] nums) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { int temp; if (nums[i] > nums[j]) { temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } } } return nums; } private static int[] compareNum(int[] nums, int num) { for (int i = 0; i < nums.length - 1; i++) { if (nums[i] <= num && nums[i+1] >= num) { for (int j = nums.length - 1; j > i + 1; j--) { nums[j] = nums[j - 1]; } nums[i + 1] = num; return nums; } } return null; }}
0 0
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- 选择问题
- TreeView节点选择问题
- DropDownList选择问题
- word2007 鼠标选择问题
- 元素选择问题
- ALV 选择 刷新 问题
- treeview选择节点问题
- Web安全XSS&CSRF
- DirectFB、Layer、Window、Surface之间关系
- ios开发中经典应用高仿项目分享<二>
- ios 画图板
- 微博推荐算法简述
- 选择问题
- 拷贝,赋值构造函数赋值
- 理解本真的REST架构风格
- Ubuntu下安装CUDA 7.5教程——真正的简便
- android开发笔记之Gson解析
- 记录下自己的脑X错误
- android之context(上下文)、五大布局
- 类的其他特性
- iOS教程:如何仿一款“账本”上架app(一)