import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet; public class BinarySearch {
public static void main(String[] args) {
int[] a = { 11, 27, 28, 33 };
// System.out.println(findFirstRepeat("qywyer23tdd", 11));
// ListNode head = LinkedListReverse.initialList();
// LinkedListReverse.printList(insertionSortList(head));[4,5,1,6,2,7,3,8],10
GetLeastNumbers_Solution(new int[] { 4, 5, 1, 6, 2, 7, 3, 8 }, 10);
} public static ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
ArrayList<Integer> list = new ArrayList<Integer>();
int cnt = 0;
if (k > input.length || k == 0) {
return list;
}
while (cnt < k) {
list.add(input[cnt]);
cnt++;
}
Collections.sort(list); for (int i = k; i < input.length; i++) {
int num = input[i];
// 如果超出最大,则不用管,如果没有超出最大,则需要加入并踢出最大
if (num < list.get(k - 1)) {
list.remove(k - 1);
list.add(num);
Collections.sort(list);
}
}
System.out.println(list);
return null;
} /**
* 插入排序 head 1 -> 7 -> 2 -> 6 -> 9 1 -> 2 -> 6 -> 7 -> 9
*/
public static ListNode insertionSortList(ListNode head) {
ListNode pstart = head;
ListNode pcurr = head.next;
if (pstart == null) {
return null;
}
// //1 7 2 6 9 3 在7后面插入888
// do {
// int currVal = pstart.val;
// if (currVal == 7) {
// ListNode newNode = new ListNode(888, null);
// newNode.setNext(pstart.next);
// pstart.setNext(newNode);
// }
// } while ((pstart = pstart.next) != null); // 1 7 2 6 9 3 在7前面插入888
do {
int currVal = pcurr.val;
if (currVal == 7) {
ListNode newNode = new ListNode(888, null);
newNode.setNext(pcurr);
pstart.setNext(newNode);
}
} while ((pcurr = pcurr.next) != null);
return head;
} public static char findFirstRepeat(String A, int n) {
HashSet<Character> hs = new HashSet<Character>();
for (char c : A.toCharArray()) {
if (hs.contains(c)) {
return c;
} else {
hs.add(c);
}
}
return ' ';
} public static int getPos(int[] A, int n, int val) {
int start = 0;
int end = n - 1;
int mid = (end - start) / 2;
while (start < end) {
if (A[mid] == val) {
return mid;
} else if (A[mid] > val) {
end = mid;
} else if (A[mid] < val) {
start = mid;
}
mid = start + (end - start) / 2;
}
return 0;
}
}

算法练习,链表二分最大n个的更多相关文章

  1. 图解堆算法、链表、栈与队列(Mark)

    原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间 ...

  2. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  3. 算法基础~链表~排序链表的合并(k条)

    算法基础~链表~排序链表的合并(k条) 1,题意:已知k个已排序链表头结点指针,将这k个链表合并,合并后仍然为有序的,返回合并后的头结点. 2,方法之间时间复杂度的比较: 方法1(借助工具vector ...

  4. Java数据结构和算法之链表

    三.链表 链结点 在链表中,每个数据项都被包含在‘点“中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中 ...

  5. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  6. 算法:时间复杂度+二分查找法(Java/Go/Python)实现

    导读 曾几何时学好数据结构与算法是我们从事计算机相关工作的基本前提,然而现在很多程序员从事的工作都是在用高级程序设计语言(如Java)开发业务代码,久而久之,对于数据结构和算法就变得有些陌生了,由于长 ...

  7. 算法练习LeetCode初级算法之链表

    删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ...

  8. C# 算法之链表、双向链表以及正向反向遍历实现

    1.简介 链表是一种非常基础的数据结构之一,我们在日常开发种都会接触到或者是接触到相同类型的链表数据结构.所以本文会使用C#算法来实现一个简单的链表数据结构,并实现其中几个简单的api以供使用. 2. ...

  9. 常用算法1 - 快速排序 & 二分查找

    1. 二分查找法: 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1. 二分查找法要求数据为一组有序的序列(大到小 ...

随机推荐

  1. jQuery的html和css

    jQuery每次返回的都是当前的集合对象: 每个方法用的时候都会把他的元素对象返回,他每次返回的都是最近的那个元素: 1.addclass() 备选元素添加一个类名 2.removeclass() 移 ...

  2. mysql配置文件修改

    mysql配置文件修改       mkdir –p /data/mysql chown -R mysql.mysql /data/mysql/     vim /etc/my.cnf [mysqld ...

  3. Activity的启动模式--总结

    3. Activity的任务栈Task以及启动模式与Intent的Flag详解? 2,Activity次级页面和主页间来回跳转,防止重复创建Activity实例 1, activity的启动模式: / ...

  4. [UE4]虚幻4 spline组件、spline mesh组件的用法

    最近公司项目需要,把这两个东东好好看了下.不得不说,这两个组件还是非常方便的,但是相关的介绍.教程却非常的少.它们概念模糊,用法奇特,我就总结下吧. 首先,先要明白spline component.s ...

  5. POI实现导出Excel和模板导出Excel

    一.导出过程 1.用户请求导出 2.先访问数据库,查询需要导出的结果集 3.创建导出的Excel工作簿 4.遍历结果集,写入工作簿 5.将Excel已文件下载的形式回复给请求客户端 二.具体实现(截取 ...

  6. window自带的公式面板

    如何使用Windows数学输入面板生成数学公式 数学输入面板是一个Windows自带的数学公式编辑软件,该软件最大的特点就是可以简单方便地写出数学公式.本文主要探讨该软件的一些基本用法. 工具/原料 ...

  7. 学习docker后的个人理解

    一.什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行 ...

  8. Linux性能优化 第四章 性能工具:特定进程CPU

    4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...

  9. three.js学习:初学three.js,从立方体开始

    目前three.js是浏览器展现3D效果的一个很强大的js工具,遗憾的是没有特别系统而全面的文档(threejs官方文档感觉有些缺漏,可以和WebGL中文网的threejs教程对比着看).好了,根据W ...

  10. Python: json模块实例详解

    ref:https://www.jianshu.com/p/e29611244810 https://www.cnblogs.com/qq78292959/p/3467937.html https:/ ...