【剑指offer】数据结构——队列 栈 堆

2023-11-08

在这里插入图片描述

数据结构——树

【剑指offer】09.用两个栈实现队列

题目描述

在这里插入图片描述

在这里插入图片描述


牛客:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

leetcode
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

题解


// 牛客
// 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。


import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        if (stack2.isEmpty())
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        return stack2.pop();
    }
}
// 力扣
// 09. 用两个栈实现队列

// 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 
// 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整
// 数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )


// 63 ms , 在所有 Java 提交中击败了 31.32% 的用户
//  46.6 MB , 在所有 Java 提交中击败了 70.90% 的用户
import java.util.Stack;

class CQueue {
	// 定义栈变量
	private Stack<Integer> stack1;
	private Stack<Integer> stack2;
	
	public CQueue() {
		stack1 = new Stack<>();  // 赋予对象
		stack2 = new Stack<>();
	}
	
	public void appendTail(int value) {
		stack1.push(value);
	}
	
	public int deleteHead() {
		// 如果stack2是非空,则不往里存元素,直接看要不要弹出
		//如果stack2空,从stack1中出栈往里存
		if (stack2.isEmpty()) { 
			while (!stack1.isEmpty()) {  // 直到把stack1掏空为止
				stack2.push(stack1.pop());
			}
		}
		// 如果stack2空,且stack1也空,有可能导致转移完元素的stack2
		// 依然是空的,此时stack2.pop()会报错,所以还要检查一下非空
		if (!stack2.isEmpty()) 
			return stack2.pop()
		return -1;  // 如果真的没元素可取,直接返回-1
	}
}


【剑指offer】30. 包含min函数的栈

题目描述

在这里插入图片描述

在这里插入图片描述

// 力扣
// 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的
// min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

// 牛客
// 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的
// min函数(时间复杂度应为O(1))。

题解

// 这题要求O(1)复杂度,遍历数据结构的所有位置找最小值肯定是不可能的,
// 这就需要新创建一个栈minstack用于专门存储push进栈A的最小的值,
// 并且把最小值一直置于minstack的栈顶,这样需要的时候直接弹出就是O(1)
// 复杂度了。

// 总的来说,minstack只用于存储最小或曾经的最小值,如果minstack
// 为空,push时直接压进去,如果minstack非空,则push之前先判断压入元素
// 与minstack栈顶元素谁比较小,取小的那个数压入。
// (如果压入元素不比minstack栈顶元素小也没关系,这样会重新压一个
// minstack栈顶元素进去,保证了minstack和dataStack两个栈的长度一致)


// 牛客
// 运行时间:11ms
// 占用内存:9796k
import java.util.Stack;

public class Solution {
	private Stack<Integer> minStack = new Stack<>();
	private Stack<Integer> dataStack = new Stack<>();

	public void push(int node) {
		if (minStack.isEmpty()) 
			minStack.push(node);
		else  // 取minStack栈顶元素和压入元素最小的那个压入
			minStack.push(Math.min(minStack.peek(), node));
		dataStack.push(node);
	}
	
	public void pop() {
		dataStack.pop();
		minStack.pop();
	}
	
	public int top() {
		return dataStack.peek();
	}
	
	public int min() {
		return minStack.peek();
	}
}


// 力扣
// 执行用时:21 ms, 在所有 Java 提交中击败了85.37%的用户
// 内存消耗:40.3 MB, 在所有 Java 提交中击败了61.41%的用户
import java.util.Stack;

class MinStack {
    private Stack<Integer> minStack;
    private Stack<Integer> dataStack;
    
    /** initialize your data structure here. */
    public MinStack() {
        minStack = new Stack<>();
        dataStack = new Stack<>();
    }
    
    public void push(int x) {
        if (minStack.isEmpty())
            minStack.push(x);
        else {
            minStack.push(Math.min(minStack.peek(), x));
        }
        dataStack.push(x);
    }
    
    public void pop() {
        dataStack.pop();
        minStack.pop();
    }
    
    public int top() {
        return dataStack.peek();
    }
    
    public int min() {
        return minStack.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.min();
 */


// 或者可以这样写
// 执行用时:22 ms, 在所有 Java 提交中击败了74.78%的用户
// 内存消耗:40.5 MB, 在所有 Java 提交中击败了13.02%的用户
class MinStack {
    private Stack<Integer> stack;
    private Stack<Integer> minLog;
    
    /** initialize your data structure here. */
    public MinStack() {
        this.stack = new Stack<Integer>();
        this.minLog = new Stack<Integer>();
    }
    
    public void push(int x) {
        stack.push(x);
        if (minLog.isEmpty() || minLog.peek() > x) {
            minLog.push(x);
        }
        else {
            minLog.push(minLog.peek());
        }
    }
    
    public void pop() {
        stack.pop();
        minLog.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int min() {
        return minLog.peek();
    }
}




【剑指offer】31. 栈的压入、弹出序列

题目描述
在这里插入图片描述
在这里插入图片描述

// 31. 栈的压入、弹出序列

// 力扣
// 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第
// 二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不
// 相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4
// ,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2
// } 就不可能是该压栈序列的弹出序列。


// 牛客
// 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个
// 序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等
// 。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈
// 序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹
// 出序列。(注意:这两个序列的长度是相等的)

题解

// 题目还是有一定难度的
// 需要直接按照题目意思模拟:
// 双指针pop序列和push序列一起遍历,push在前,如果push的元素正好等
// 于pop的元素,则push之后直接pop,如果不相等,压入栈,push指针右移,
// 继续判断。push序列遍历完不能停止,pop序列还要继续遍历,直到栈存储
// 的元素全部弹出,栈中存在弹不出的元素,就返回false了。全部弹出则返
// 回true。

在这里插入图片描述

// 力扣
// 比较好理解
// 执行用时:2 ms, 在所有 Java 提交中击败了94.50%的用户
// 内存消耗:38 MB, 在所有 Java 提交中击败了81.85%的用户
import java.util.Stack;
class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        if (pushed.length == 0 && popped.length == 0) 
            return true;
        if (pushed.length == 0 || popped.length == 0)  // 排除特殊情况
            return false;
        int i = 0, j = 0;  // 索引 for push and pop
        Stack<Integer> sim = new Stack<>();
		// 直到popped指针走完再停止while(弹出操作执行完再停止while)
        while (j < popped.length) {
            // System.out.println(sim.toString());
			// 如果栈顶元素等于弹出序列popped的遍历元素
            if (!sim.isEmpty() && sim.peek() == popped[j]) {  
                sim.pop();  // 弹出
                j++;  // 指针右移
            }
            else if (i < pushed.length && pushed[i] == popped[j]) {
                sim.push(pushed[i++]);  // push遍历元素和pop遍历元素相等
                sim.pop();  // 压入再弹出,两个指针右移
                j++;
            }
            else if (i < pushed.length) {  // 如果没有可弹出元素,
                sim.push(pushed[i++]);  // 压入元素,指针右移
            }
            else  // 如果元素全部压入栈了,又没有可弹出元素,直接false
                return false;
        }
        return sim.isEmpty();
   }
}

// 力扣
// 稍微精简
import java.util.Stack;
class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        int i = 0, j = 0;  // for push and pop
        Stack<Integer> sim = new Stack<>();
        while (j < popped.length) {
            // System.out.println(sim.toString());
            if (!sim.isEmpty() && sim.peek() == popped[j]) {
                sim.pop();
                j++;
            }
            else if (i < pushed.length && pushed[i] == popped[j]) {
				i++;
                j++;
            }
            else if (i < pushed.length) {
                sim.push(pushed[i++]);
            }
            else 
                return false;
        }
		return sim.isEmpty();
   }
}


// 力扣
// 逻辑合并一下
// 执行用时:2 ms, 在所有 Java 提交中击败了94.50%的用户
// 内存消耗:38.3 MB, 在所有 Java 提交中击败了36.81%的用户
import java.util.Stack;
class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        int i = 0, j = 0;  // for push and pop
        Stack<Integer> sim = new Stack<>();
        while (i < pushed.length) {
			// System.out.println(sim.toString());
			sim.push(pushed[i++]);
            while (j < popped.length && !sim.isEmpty() && sim.peek() == popped[j]) {
                sim.pop();
                j++;
            }
        }
        return sim.isEmpty();
   }
}

// 漂亮版
class Solution {
    int pop = 0;
    int push = 0;
    private Stack<Integer> stack;
    
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        this.stack = new Stack<Integer>();
        
        while (push < pushed.length && pop < popped.length) {
            stack.push(pushed[push++]);
            while (!stack.isEmpty() && stack.peek() == popped[pop]) {
                stack.pop();
                pop++;
            }
        }
        return stack.isEmpty();
    }
}





// 牛客
// 运行时间:11ms
// 占用内存:9668k
import java.util.Stack;
public class Solution {
	public boolean IsPopOrder(int[] pushA, int[] popA) {
		int i = 0, j = 0;
		Stack<Integer> sim = new Stack<>();
		while (i < pushA.length) {
			sim.push(pushA[i++]);
			while (j < popA.length && !sim.isEmpty() && sim.peek() == popA[j]) {
				sim.pop();
				j++;
			}
		}
		return sim.isEmpty();
	}
}


【剑指offer】41. 数据流中的中位数

题目描述

在这里插入图片描述

在这里插入图片描述

// 41. 数据流中的中位数

// 力扣
// 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,
// 那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中
// 读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平
// 均值。

// 例如,
// [2,3,4] 的中位数是 3
// [2,3] 的中位数是 (2 + 3) / 2 = 2.5
// 设计一个支持以下两种操作的数据结构:

// void addNum(int num) - 从数据流中添加一个整数到数据结构中。
// double findMedian() - 返回目前所有元素的中位数。



// 牛客
// 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么
// 中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数
// 个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使
// 用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中
// 位数。

题解

/ 双堆维护 /
// 数据流要么有奇数个,要么有偶数个。
// 如果监控存入的元素个数size,必然size的变化有:奇数->偶数->奇数->偶数...
// 我们将第奇数个和第偶数个流入的数据分开,并使用最大堆最小堆来保存。

// 这是由于最大堆可以自动维护较小值(通过弹出最大值),最小堆可以自动维护较大值(通过弹出最小值。
// 由于第奇数个数先于第偶数个数存入,所以第奇数个数存入堆A(最大堆
// 还是最小堆无所谓),那么第偶数个数就必须存入堆B(是什么堆无所谓,反正跟A不同就行)
// 这个解里我令第1个,第3个...,这些第奇数个流入的数组存入最小堆,
// 令第2个,第4个...,第偶数个流入的数字存入最大堆。
// 数据在入堆之前还必须经过相反堆的筛选,比如第1个存入的数字规定存入最小堆
// 那么先进入最大堆进行筛选,此时最大堆弹出堆顶值(最大值),再存入最小堆,
// 第2个存入的数字同理,以此类推。
// 则最大堆会遍历数据流里排名奇数位的数字,并弹出的所有大值给最小堆
// 最小堆也会遍历数据流也排名偶数位的数字,并弹出所有的小值给最大堆。
// 经过这样的筛选,所有的大值都会给最小堆,所有的小值都会给最大堆。
// 求中位数时,只需看堆顶元素和数据流个数即可。

// 如果数据总数有偶数个,那么取大值里的最小值(最小堆堆顶)和
// 小值里的最大值(最大堆堆顶)求和÷2即可得到中位数。
// 如果数据总数为奇数个,取第奇数个存入堆(是最大堆还是最小堆无所谓)
// 的堆顶元素,就是中位数。


// 牛客
// 此解设第奇数个数字的存储堆为最小堆,第偶数个数据的存储堆为最大堆
// 运行时间:16ms
// 占用内存:10044k
import java.util.PriorityQueue;
import java.util.Comparator;
public class Solution {
	// 最大堆maxHeap:用于筛选大值传入最小堆minHeap,自身用于保存小值。
	private PriorityQueue<Integer> maxHeap = new PriorityQueue<>( new Comparator<Integer>() {
		@Override
		public int compare(Integer o1, Integer o2) {
			return o2.compareTo(o1);
		}
	});
	// 最小堆minHeap:用于筛选小值传入最大堆maxHeap,自身用于保存大值。
	private PriorityQueue<Integer> minHeap = new PriorityQueue<>();
	private int size = 0;  // size让我们监控所有元素的总数

    public void Insert(Integer num) {
		// 如果已有偶数个元素,则将第奇数个元素num,存入最大堆中
		// ,筛选出最大堆的最大值弹出,存入最小堆中。
		// 如果当前数num在最大堆maxHeap就是最大值,会被直接存入
		// 最小堆minHeap,如果在maxHeap中不是最大值,那么会maxHeap
		// 会自己推出一个堆内当前的最大值给minHeap,相当于做了数据交换。
		if (size % 2 == 0) {
			maxHeap.add(num);
			minHeap.add(maxHeap.poll());
		} 
		else {  // 如果已有奇数个元素,则将第偶数个元素存入最小堆中
			minHeap.add(num);  
			// 后将最小堆中最小值弹出(筛选),存入最大堆中。
			maxHeap.add(minHeap.poll());
		}
		size++;  // 每存入一个数据,size+1,记录元素的总数
    }

    public Double GetMedian() {
		// 两个堆元素相同,元素个数为偶数
		if (maxHeap.size() == minHeap.size()) 
			return (double) (maxHeap.peek() + minHeap.peek()) / 2.0;
		else 
			return (double) minHeap.peek();
	}
}



// 牛客
// 此解设第奇数个数字的存储堆为最大堆,第偶数个数据的存储堆为最小堆
// 运行时间 18ms
// 占用内存 10180KB
import java.util.PriorityQueue;
import java.util.Comparator;
public class Solution {

	private PriorityQueue<Integer> maxHeap = new PriorityQueue<>( new Comparator<Integer>() {
		@Override
		public int compare(Integer o1, Integer o2) {
			return o2.compareTo(o1);
		}
	});
	private PriorityQueue<Integer> minHeap = new PriorityQueue<>();
	private int size = 0;

    public void Insert(Integer num) {
		if (size % 2 == 0) {
			minHeap.add(num);
			maxHeap.add(minHeap.poll());
		}
		else {
            maxHeap.add(num);  
			minHeap.add(maxHeap.poll());
		}
		size++;
    }

    public Double GetMedian() {
		if (maxHeap.size() == minHeap.size()) 
			return (double) (maxHeap.peek() + minHeap.peek()) / 2.0;
		else 
			return (double) maxHeap.peek();
	}
}






// 力扣
// 此解设第奇数个数字的存储堆为最小堆,第偶数个数据的存储堆为最大堆
// 执行用时:88 ms, 在所有 Java 提交中击败了34.84%的用户
// 内存消耗:49.4 MB, 在所有 Java 提交中击败了84.64%的用户
import java.util.PriorityQueue;
import java.util.Comparator;
class MedianFinder {
    private PriorityQueue<Integer> maxHeap, minHeap;
    int size;

    public MedianFinder() {
        maxHeap = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        });
        minHeap = new PriorityQueue<>();
        size = 0;
    }
    
    public void addNum(int num) {
        if (size % 2 == 0) {
            maxHeap.add(num);
            minHeap.add(maxHeap.poll());
        }
        else {
            minHeap.add(num);
            maxHeap.add(minHeap.poll());
        }
        size++;
    }
    
    public double findMedian() {
        if (minHeap.size() == maxHeap.size())
            return (double) (minHeap.peek() + maxHeap.peek()) / 2.0;
        else 
            return (double) minHeap.peek();
    }
}

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */



// 力扣
// 此解设第奇数个数字的存储堆为最大堆,第偶数个数据的存储堆为最小堆
// 执行用时:92 ms, 在所有 Java 提交中击败了26.29%的用户
// 内存消耗:49.7 MB, 在所有 Java 提交中击败了43.06%的用户
import java.util.PriorityQueue;
import java.util.Comparator;
class MedianFinder {
    private PriorityQueue<Integer> maxHeap, minHeap;
    int size;

    public MedianFinder() {
        maxHeap = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        });
        minHeap = new PriorityQueue<>();
        size = 0;
    }
    
    public void addNum(int num) {
        if (size % 2 == 0) {

            minHeap.add(num);
            maxHeap.add(minHeap.poll());
        }
        else {
            maxHeap.add(num);
            minHeap.add(maxHeap.poll());
        }
        size++;
    }
    
    public double findMedian() {
        if (minHeap.size() == maxHeap.size())
            return (double) (minHeap.peek() + maxHeap.peek()) / 2.0;
        else 
            return (double) maxHeap.peek();
    }
}



【剑指offer】59.2 队列的最大值

题目描述
在这里插入图片描述

// 59.2 队列的最大值

// 力扣
// 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数m
// ax_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
// 若队列为空,pop_front 和 max_value 需要返回 -1

题解

// 力扣
// 数组辅助法
// 执行用时:70 ms, 在所有 Java 提交中击败了6.10%的用户
// 内存消耗:46.3 MB, 在所有 Java 提交中击败了63.28%的用户
class MaxQueue {
	List<Integer> list;
	Queue<Integer> queue;

    public MaxQueue() {
		list = new ArrayList<Integer>();
		queue = new LinkedList<Integer>();
    }
    
    public int max_value() {
		if (queue.isEmpty())
			return -1;
		Collections.sort(list);
		return list.get(list.size() - 1);
    }
    
	// 从背后(back)入队
    public void push_back(int value) {
		queue.add(value);
		list.add(value);
    }
    
	// 从前面(front)出队
    public int pop_front() {
		if (queue.isEmpty())
			return -1;
		int out = queue.remove();
		list.remove(list.indexOf(out));
		return out;
    }
}

/**
 * Your MaxQueue object will be instantiated and called as such:
 * MaxQueue obj = new MaxQueue();
 * int param_1 = obj.max_value();
 * obj.push_back(value);
 * int param_3 = obj.pop_front();
 */



// 力扣
// 双端队列辅助法
// 执行用时:41 ms, 在所有 Java 提交中击败了55.00%的用户
// 内存消耗:46.4 MB, 在所有 Java 提交中击败了47.06%的用户
class MaxQueue {
	Deque<Integer> deque;
	Queue<Integer> queue;

    public MaxQueue() {
		deque = new LinkedList<Integer>();
		queue = new LinkedList<Integer>();
    }
    
    public int max_value() {
		if (queue.isEmpty())
			return -1;
		return deque.peekFirst();
    }
    
	// 从背后(back)入队
    public void push_back(int value) {
		while (!deque.isEmpty() && deque.peekLast() < value) {
			deque.pollLast();
		}
		deque.offerLast(value);
		queue.offer(value);
    }
    
	// 从前面(front)出队
    public int pop_front() {
		if (queue.isEmpty())
			return -1;
		int res = queue.poll();
		if (res == deque.peekFirst()) {
			deque.pollFirst();
		}
		return res;
    }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【剑指offer】数据结构——队列 栈 堆 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • STM32引用“CmBacktrace”: ARM Cortex-M 系列 MCU 错误追踪库

    目录 概述 一 使用方法 0 CmBacktrace 是什么 1 为什么选择 CmBacktrace 2 CmBacktrace 如何使用 2 1 演示 2 2 Demo 2 3 移植说明 2 4 API 说明 2 5 常见问题 2 6 许
  • 【树莓派】error: command ‘/usr/bin/arm-linux-gnueabihf-gcc‘ failed with exit code 1(已解决)

    输入以下命令 export CFLAGS fcommon pip3 install RPi GPIO 参考网址 https askubuntu com questions 1290037 error while installing rpi
  • cpu与外设接口,cpu时序控制、电源时序控制(电源IC控制)

    目录 1 cpu与外设和存储器数据交换分别通过两种接口连接 I O接口和存储器接口 2 89C51单片机时钟电路和时序控制 3 CPU 指令周期 时序产生器和控制方式 重要 3 1 时序控制方式 4 使用通用电源IC实现电源时序控制的电路
  • PIP环境复制之requirements.txt

    1 requirements txt介绍 requirements txt顾名思义 程序的依赖 即一个项目所需要的依赖包列表 在项目平移的时候 或者程序所需要的环境过多 而不至于频繁的PIP requirements txt给此工作提供了方
  • 使用function_requires的Boost概念测试程序

    使用function requires的Boost概念测试程序 Boost是一个非常受欢迎的C 库集合 它为开发人员提供了许多实用的工具和库 以增强C 的功能和性能 其中之一是function requires概念 它可以用于在编译时检查函
  • 手把手带你撸zookeeper源码-客户端如何发送数据到zk集群服务端的

    接上篇文章继续分析 手把手带你撸zookeeper源码 zookeeper客户端如何和zk集群创建连接 上篇文章我们分析到了org apache zookeeper ClientCnxn SendThread primeConnection
  • 机器学习--PCA(主成分分析)原理及应用

    众所周知PCA是有效的降维方法 当你的特征非常多维度非常大的时候 为了使机器学习的算法在计算或是训练的时候有更高的效率 通常会进行降维处理 将一个具有m个数据n维的数据降为k维的数据 方法如下 算出一个sigma矩阵 x i 为n 1的矩阵
  • dmg文件 linux,安装和使用Dmg2Img在Linux上创建macOS安装盘

    本文介绍安装和使用Dmg2Img的方法 以在Linux操作系统上创建macOS安装盘 在Linux中安装Dmg2Img 在能够创建新的安装映像之前 必须在计算机上安装Dmg2Img应用程序 Dmg2Img能在众多主流Linux发行版中安装
  • Keil5调试代码时关于警告及错误信息的处理

    图一 Warning 图二 NoWarning Keil中出现warning 160 D unrecognized pragma这样的错误怎么解决 答 每一种开发环境支持的 pragma是不一样的 不支持的就不能用了 例如图一中的messa
  • 安装ubuntu分区设置

    一般来说 在linux系统中都有最少两个挂载点 分别是 根目录 及 swap 交换分区 其中 是必须的 一般来说我们最少需要两个分区 需要一个SWAP分区 和一个 分区 但把一些常用 重要的挂载点分到其它分区 这样便于管理 一般一个 分区
  • 对faster rcnn的一些修改

    在network py中修改anchor scales 第262行 def create architecture self sess mode num classes tag None anchor scales 8 16 32 anch
  • Linux中FTP传输协议

    目录 一 ftp的简介 实验一 匿名传输 1 配置文件 etc vsftpd vsftpd conf 2 在 var ftp pub中新建文件并写数据 3 在cmd中连接虚拟机 4 向真机发送文件 5 向虚拟机发送文件 实验二 禁止任意用户
  • c语言简易密码本爆破

    代码如下 实现原理比较简单 通过读取txt文件密码本与内置好的密码口令进行对比 密码本可以在网页上找 也可以用这个密码字典下载 弱口令字典下载 密码字典 迷你下载站为大家分享这个弱口令字典文件 它列出了多款规则的密码 有需要的大神们可以参考
  • 485、CAN、单总线、SPI、I2C的概念,特点,协议,使用方法及通信方式,还有它们之间的区别

    一 概念 1 485 485 一般称作 RS485 EIA 485 是隶属于 OSI 模型物理层的电气特性规定为 2 线 半双工 多点通信的标准 它的电气特性和 RS 232 大不一样 用缆线两端的电压差值来表示传递信号 2 CAN CAN
  • C#中变量的类型

    文章目录 值类型 引用类型 值类型与引用类型的区别 枚举类型 变量的作用域 值类型 C 中值类型的变量主要包括整数类型 浮点类型 decimal和bool类型等 值类型的变量都在堆栈中进行分配 因此效率很高 所以使用值类型的主要目的是为了提
  • (IDEA)创建Java类时,自动生成作者、时间和版本号注释;以及方法注释时,自动生成参数和返回值注释

    可恢复 IDEA 创建Java类时 自动生成作者 时间和版本号注释 以及方法注释时 自动生成参数和返回值注释 1 作者 时间和版本号注释 2 方法注释 自动生成方法中参数和返回值 IDEA 创建Java类时 自动生成作者 时间和版本号注释
  • 【iVX】颠覆常规,首个图形通用无代码编程平台诞生

    个人主页 个人主页 新人博主 喜欢就关注一下呗 文章目录 关于传统 低代码平台 我的看法 低代码平台的 局限性 传统的 低代码平台 存在以下一些缺点 关于iVX 为什么选择iVX 1 可视化的操作自动生成 全栈代码 2 超强的代码能力 3
  • Linux I2C 驱动实验

    目录 Linux I2C 驱动框架简介 I2C 总线驱动 I2C 设备驱动 I2C 设备和驱动匹配过程 I MX6U 的I2C 适配器驱动分析 I2C 设备驱动编写流程 I2C 设备信息描述 I2C 设备数据收发处理流程 硬件原理图分析 实
  • 计算机操作系统知识架构整理

    计算机操作系统 操作系统引论 操作系统的目标与应用 操作系统的目标 操作系统的作用 推动操作系统发展的主要动力 操作系统的发展过程 无操作系统的计算机系统 单道批处理系统 多道批处理系统 分时系统 实时系统 微机操作系统的发展 操作系统的基
  • 【剑指offer】数据结构——队列 栈 堆

    目录 数据结构 树 剑指offer 09 用两个栈实现队列 剑指offer 30 包含min函数的栈 剑指offer 31 栈的压入 弹出序列 剑指offer 41 数据流中的中位数 剑指offer 59 2 队列的最大值 数据结构 树 剑