算法习题库
碎时纪
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法
7、逆序对个数题:一个数列,如果左边的数大,右边的数小,则称这两个数为一个逆序对,求出一个数列中有多少个逆序对思路:参照归并排序package com.gh.check01;public class _04_排序之归并排序 { private static int[] helper; private static int num=0;//记录逆序数 public static v...原创 2020-02-09 15:04:42 · 129 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面题:输入一个整数数组,调整数组中数字的数据,使得所有奇数位于数组的前半部分,所有偶数位于后半部分,时间复杂度O(n)思路:两个指针分别指向头(left)和尾(right)若left所指的数为奇数,继续向后扫描,若为偶数,跳出循环若right所指的数为偶数,继续向前扫描,若为奇数,跳出循环交换两个指针所指的数,重复上述过程public static v...原创 2020-02-06 16:01:16 · 167 阅读 · 0 评论 -
合并有序数组(归并排序)
合并有序数组题:给定两个排序后的数组A和数组B,其中A的末端有足够的缓冲空间容纳B,编写一个方法,将B合并到A并排序思路:参照归并排序对A数组进行从后往前进行填充A和B数组两两比较,大的数填到A中public static void main(String[] args) { int[] arr = new int[20]; for(int i=0; i<10; i+...原创 2020-02-06 15:55:07 · 2020 阅读 · 0 评论 -
最小可用ID
最小可用ID题:在非负数组中找到最小的可分配的id(从1开始编号),数据量1000000思路1:开辟存储空间private static int helper[];public static int findID(int[] arr) { int len = arr.length; int[] helper = new int[len+1]; for(int i=0; i...原创 2020-02-06 15:39:59 · 300 阅读 · 0 评论 -
数量正好占是数组长度一半的数(寻找发帖水王)
数量正好占是数组长度一半的数题:寻找发帖水王,出现次数恰好为个数的一半,求出这个数/* * 水王占总数的一半,说明总数为偶数 * 水王不失一般性,假设隔一个数就是水王的id,两两不同最后一定会消减为0 * 水王可能是最后一个元素,每次扫描的时候,多一个动作,与最后一个元素进行比较,单独计数,若恰好为数量的一半,则为水王 * 如果不是,计数不足一半,那么去掉最后一个元素,水王就是...原创 2020-02-06 15:34:11 · 250 阅读 · 0 评论 -
数组中超过一半的数字
超过一半的数字题:数组中有一个数字出现的次数超过了这个数组长度的一半,找出这个数字//不同的数进行消除 public static int solve(int[] arr) { //候选数 int candidate = arr[0]; //出现的次数 int nTimes = 1; for(int i=1; i<arr.length; i++) { //两两...原创 2020-02-06 15:31:46 · 129 阅读 · 0 评论 -
第K个元素(快速排序)
第K个元素题:以尽量高的效率求出一个乱序数组中按数值大小排序的第K个元素值思路:对数组进行快速排序分区操作,获取主元位置,确定主元是第几个元素与K进行比较,重复操作public static int select_k(int[] arr, int p, int r, int k){ int point = partition2(arr, p, r); //主元位置 int q...原创 2020-02-06 15:30:01 · 325 阅读 · 0 评论
分享