已解决
算法通关村第五关|白银|队栈和Hash的经典算法题【持续更新】
来自网友在路上 176876提问 提问时间:2023-11-03 00:39:01阅读次数: 76
最佳答案 问答题库768位专家为你答疑解惑
1.用栈实现队列
用两个栈实现队列。
class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack = new LinkedList<Integer>();outStack = new LinkedList<Integer>();}public void push(int x) {inStack.push(x);}public int pop() {if (outStack.isEmpty()) {in2out();}return outStack.pop();}public int peek() {if (outStack.isEmpty) {in2out();}return outStack.peek();}public boolean empty() {return inStack.isEmpty() && outStack.isEmpty();}private void in2out() {while (!inStack.isEmpty()) {outStack.push(inStack.pop());}}
}
2.用队列实现栈
2.1 用两个队列实现栈。
queue2 作缓冲区, queue1 进行存储,queue1 的队首就是栈顶。
class MyStack {Queue<Integer> queue1;Queue<Integer> queue2;public MyStack() {queue1 = new LinkedList<Integer>();queue2 = new LinkedList<Integer>();}public void push(int x) {queue2.offer(x);while (!queue1.isEmpty()) {queue2.offer(queue1.poll());}Queue<Integer> temp = queue1;queue1 = queue2;queue2 = temp;}public int pop() {return queue1.poll();}public int top() {return queue1.peek();}public boolean empty() {return queue1.isEmpty();}
}
2.2 用一个队列实现栈。
利用先进先出的特点,将队列中已有的内容放到新的元素后边。
class MyStack {Queue<Integer> queue;int count;public MyStack() {queue = new LinkedList<Integer>();count = 0;}public void push(int x) {queue.offer(x);for (int i = 0; i < count; i++) {queue.push(queue.poll());}count++;}public int pop() {count--;return queue.poll();}public int top() {return queue.peek();}public boolean empty() {return queue.isEmpty();}
}
3.n数之和专题
3.1 两数之和。
public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();for (int i = 0; i < nums.length; i++) {if (hashtable.containsKey(target - nums[i])) {return new int[]{hashtable.get(target - nums[i]), i);}hashtable.put(nums[i], i);}return new int[0];
}
3.2 三数之和。
class Solution {public List<List<Integer>> threeSum(int[] nums) {int n = nums.length;Arrays.sort(nums);List<List<Integer>> ans = new ArrayList<List<Integer>>();for (int first = 0; first < n; first++) {if (first > 0 && nums[first] == nums[first - 1] {continue;}int third = n - 1;int target = -nums[first];for (int second = first + 1; second < n; second++) {if (second > first + 1 && nums[second] == nums[second - 1] {continue;}while (second < third && nums[second] + nums[third] > target) {third--;}if (second == third) {break;}if (nums[second] + nums[third] == target) {List<Integer> list = new ArrayList<Integer>();list.add(nums[first]);list.add(nums[second]);list.add(nums[third]);ans.add(list);}}}return ans;}
}
3.3 四数之和。【持续更新】
3.4 四数相加II。【持续更新】
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ♥
算法通关村专栏:不易|算法通关村 ♥
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"算法通关村第五关|白银|队栈和Hash的经典算法题【持续更新】":http://eshow365.cn/6-30648-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!