peek

[编程题]查找第K大的元素

拈花ヽ惹草 提交于 2019-11-29 03:26:49
给定一个无序的整型数组A[n],数组大小大于等于3,允许有值相同的元素;请设计算法找到该数组排序后第三大的元素值并输出. 输入描述: 一个非空的整数数组(至少有3个元素,可正可负) 输出描述: 第三大的元素值 示例1 输入 [1,2,3,4,5] 输出 3 示例2 输入 [1,1,2,2,3] 输出 2 链接:https://www.nowcoder.com/questionTerminal/673454422d1b4a168aed31e449d87c00 来源:牛客网 import java.util.PriorityQueue; import java.util.Scanner; import static java.lang.Integer.parseInt; import static java.lang.System.in; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(in); String[] str = sc.nextLine().replace("[", "").replace("]", "").split(","); int[] data = new int[str.length]; for (int i = 0; i < data

Java核心(四)你不知道的数据集合

谁都会走 提交于 2019-11-29 02:47:53
导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List、Set、Queue和Map集合,Map并不属于Collection的子集,而是和它平行的顶级接口。Collection下的子集的关系如文章开头图片所示。 本文的重点将会围绕: 集合的使用、性能、线程安全、差异性、源码解读等几个方面进行介绍。 本文涉及的知识点,分为两部分: 第一部分,Collection所有子集: List => Vector、ArrayList、LinkedList Set => HashSet、TreeSet Queue 第二部分,Map => Hashtable、HashMap、TreeMap、ConcurrentHashMap。 一、List 我们先来看List、Vector、ArrayList、LinkedList,它们之间的继承关系图,如下图: 可以看出Vector、ArrayList、LinkedList,这三者都是实现集合框架中的List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。 来看它们的主要方法

Java生产者和消费者模型的5种实现方式

蹲街弑〆低调 提交于 2019-11-28 22:54:30
前言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。 生产者消费者.png 现在用四种方式来实现生产者消费者模型 wait()和notify()方法的实现 这也是最简单最基础的实现,缓冲区满和为空时都调用wait()方法等待,当生产者生产了一个产品或者消费者消费了一个产品之后会唤醒所有线程。 /** * 生产者和消费者,wait()和notify()的实现 * @author ZGJ * @date 2017年6月22日 */ public class Test1 { private static Integer count = 0; private static final Integer FULL = 10; private static String LOCK = "lock"; public static void main(String[] args) { Test1 test1 = new Test1(); new Thread(test1.new Producer()).start(); new Thread(test1.new Consumer()).start(); new Thread(test1.new

《Java 8 in Action》Chapter 8:重构、测试和调试

喜欢而已 提交于 2019-11-28 21:49:34
我们会介绍几种方法,帮助你重构代码,以适配使用Lambda表达式,让你的代码具备更好的可读性和灵活性。除此之外,我们还会讨论目前比较流行的几种面向对象的设计模式, 包括策略模式、模板方法模式、观察者模式、责任链模式,以及工厂模式,在结合Lambda表达式之后变得更简洁的情况。最后,我们会介绍如何测试和调试使用Lambda表达式和Stream API的代码。 1. 为改善可读性和灵活性重构代码 1.1 改善代码的可读性 Java 8的新特性也可以帮助提升代码的可读性: 使用Java 8,你可以减少冗长的代码,让代码更易于理解 通过方法引用和Stream API,你的代码会变得更直观 利用Lambda表达式、方法引用以及Stream改善程序代码的可读性: 重构代码,用Lambda表达式取代匿名类 用方法引用重构Lambda表达式 用Stream API重构命令式的数据处理 1.2 从匿名内部类到Lambda表达式的转换 将实现单一抽象方法的匿名类转换为Lambda表达式 // 传统的方式,使用匿名类 Runnable r1 = new Runnable(){ public void run(){ System.out.println("Hello"); } } // 新的方式,使用Lambda表达式 Runnable r2 = () -> System.out.println(

数据结构--栈

老子叫甜甜 提交于 2019-11-28 19:28:12
栈(stack),是一种线性存储结构,它有以下几个特点: (01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。 (02) 向栈中添加/删除数据时,只能从栈顶进行操作。 栈通常包括的三种操作:push、peek、pop。 push -- 向栈中添加元素。 peek -- 返回栈顶元素。 pop -- 返回并删除栈顶元素的操作。 //C++的 STL 中自带的"栈"(stack)的示例 #include<iostream> #include<stack> using namespace std; int main(){ //初始化变量 int tmp = 0; //初始化栈 stack<int>stack1; //将1,2,3依次推入栈中 stack1.push(1); stack1.push(2); stack1.push(3); //将栈顶元素赋值给a并删除栈顶元素; stack1.pop(); //将栈顶元素赋值给a,不并删除栈顶元素; tmp=stack1.top(); stack1.push(4); while (!stack1.empty()) { tmp = stack1.top(); stack1.pop(); cout << tmp << endl; } system("pause"); return 0; }   

Stream.peek() method in Java 8 vs Java 9

房东的猫 提交于 2019-11-28 04:48:53
I am in the progress of learning through Java 8 lambda expressions and would like to ask about the following piece of Java code relating to the peek method in the function interface that I have come across. On execution of the program on IDE, it gives no output. I was expecting it would give 2, 4, 6 . import java.util.Arrays; import java.util.List; public class Test_Q3 { public Test_Q3() { } public static void main(String[] args) { List<Integer> values = Arrays.asList(1, 2, 3); values.stream() .map(n -> n * 2) .peek(System.out::print) .count(); } } Eugene I assume you are running this under

#leetCode刷题纪实 Day6

℡╲_俬逩灬. 提交于 2019-11-27 23:11:34
https://leetcode-cn.com/problems/implement-queue-using-stacks/ 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false 说明: 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。 小菜鸡的尝试 看到Myqueue的类的设计有一些慌乱,大概是因为太菜吧,马上心慌,开始看大佬题解 大佬的题解 class MyQueue { public: /** Initialize your data structure

重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈

随声附和 提交于 2019-11-27 20:41:30
定场诗 金山竹影几千秋,云索高飞水自流; 万里长江飘玉带,一轮银月滚金球。 远自湖北三千里,近到江南十六州; 美景一时观不透,天缘有分画中游。 前言 本章是重读《学习JavaScript数据结构与算法-第三版》的系列文章,本章为各位小伙伴分享数据结构- 栈 的故事,请让胡哥带你走进 栈 的世界 栈 何为栈?栈是一种遵从**后进先出(LIFO)**原则的有序集合。 新添加或待删除的元素都保存在栈的同一端,称作栈顶;另一端就叫栈底。 在栈里,新元素都靠近栈顶,旧元素都接近栈底。 基于数组的栈 我们将创建一个基于数组的栈,了解栈的结构、运行规则 /** * 基于数组array的栈Stack * @author huxiaoshuai */ class Stack { // 初始化 constructor () { this.items = [] } } 使用数组保存栈里的元素 数组允许我们在任何位置添加和删除元素,那基于栈遵循 LIFO 原则,我们对元素的插入和删除功能进行封装 方法 描述 push(element(s)) 添加一个(或多个)新元素到栈顶 pop() 移除栈顶元素,同时返回被移除的元素 peek() 返回栈顶的元素,不对栈做任何修改 isEmpty() 判断栈是否为空,为空则返回true,否则返回false clear() 移除栈的所有元素 size() 返回栈的元素个数

739. Daily Temperatures

随声附和 提交于 2019-11-27 20:12:41
Question 739. Daily Temperatures Solution 题目大意:比今天温度还要高还需要几天 思路:笨方法实现,每次遍历未来几天,比今天温度高,就坐标减 Java实现: public int[] dailyTemperatures(int[] temperatures) { int[] ans = new int[temperatures.length]; for (int i = 0; i<temperatures.length; i++) { int highIdx = i; for (int j=i+1; j<temperatures.length; j++) { if (temperatures[j] > temperatures[i]) { highIdx = j; break; } } ans[i] = highIdx - i; } return ans; } Ref 别人实现高效的方法 https://leetcode.com/problems/daily-temperatures/discuss/109832/Java-Easy-AC-Solution-with-Stack Stack public int[] dailyTemperatures(int[] temperatures) { Stack<Integer> stack =

C equivalent to fstream's peek

我的未来我决定 提交于 2019-11-27 04:58:52
I know in C++, you're able to peek at the next character by using: in.peek(); . How would I go about this when trying to "peek" at the next character of a file in C? fgetc + ungetc . Maybe something like this: int fpeek(FILE *stream) { int c; c = fgetc(stream); ungetc(c, stream); return c; } You could use a getc followed by an ungetc Charles Ma you'll need to implement it yourself. use fread to read the next character and fseek to go back to where you were before the read EDIT : int fsneaky(FILE *stream, int8_t *pBuff, int sz) { sz = fread(pBuff, 1, sz, stream) fseek(pFile, -sz, SEEK_CUR);