算法练习LeetCode初级算法之设计问题
打乱数组
不断的让第一个与后面随机选择的数交换
class Solution {
private int[] nums;
private int[] initnums;
public Solution(int[] nums) {
this.nums=nums;
this.initnums=Arrays.copyOf(nums, nums.length);//这里必须要复制,要指明对象
}
/** Resets the array to its original configuration and return it. */
public int[] reset() {
return initnums;//这里返回上面的复制
}
/** Returns a random shuffling of the array. */
public int[] shuffle() {
Random random=new Random();
for (int i = 0; i <nums.length/2; i++) {
swap(nums, 0, random.nextInt(nums.length));
}
return nums;
}
private void swap(int[] nums,int i,int j) {
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
最小栈
自己写的有点慢,勉强通过
class MinStack {
/** initialize your data structure here. */
Stack<Integer> stack;
public MinStack() {
stack=new Stack<>();
}
public void push(int x) {
stack.push(x);
}
public void pop() {
if (!stack.isEmpty()) {
stack.pop();
}
}
public int top() {
return stack.peek();//这里和我之前理解的不太一样,之前是取栈顶顺便就删除了
}
public int getMin() {
Stack<Integer> stack2=new Stack<>();
stack2.addAll(0, stack);
Collections.sort(stack2);
return stack2.get(0);
}
}
双栈法挺快
class MinStack {
/** initialize your data structure here. */
Stack<Integer> stack,minStack;
public MinStack() {
stack=new Stack<>();
minStack=new Stack<>();
}
public void push(int x) {
stack.push(x);
if (minStack.isEmpty()) {
minStack.push(x);
}else if (x<=minStack.peek()) {//此处若没有等号
minStack.push(x);
}
}
public void pop() {
if (stack.peek().equals(minStack.peek())) {//这里可能会提示栈为空的异常
stack.pop();
minStack.pop();
}else {
stack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}
算法练习LeetCode初级算法之设计问题的更多相关文章
- 【LeetCode算法】LeetCode初级算法——字符串
在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...
- 算法练习LeetCode初级算法之链表
删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ...
- 算法练习LeetCode初级算法之字符串
反转字符串 我的解法比较low,利用集合的工具类Collections.reverse反转,用时过长 class Solution { public void reverseString(char[] ...
- 算法练习LeetCode初级算法之数组
删除数组中的重复项 官方解答: 旋转数组 存在重复元素 只出现一次的数 官方解答: 同一个字符进行两次异或运算就会回到原来的值 两个数组的交集 II import java.util.Arr ...
- 算法练习LeetCode初级算法之其他
位1的个数 解法一: class Solution { // you need to treat n as an unsigned value public int hammingWeight(int ...
- 算法练习LeetCode初级算法之数学
Fizz Buzz class Solution { public List<String> fizzBuzz(int n) { List<String> list=new L ...
- 算法练习LeetCode初级算法之动态规划
爬楼梯:斐波那契数列 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 非递归解法 class S ...
- 算法练习LeetCode初级算法之排序和搜索
合并两个有序数组 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { System.arrayco ...
- 算法练习LeetCode初级算法之树
二叉树的前序遍历 我的解法:利用递归,自底向下逐步添加到list,返回最终的前序遍历list class Solution { public List<Integer> preorderT ...
随机推荐
- 深度优先搜索DFS(一)
实例一 0/1背包问题: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品重量和不超过容量V的前提下,让背包中的物品 ...
- 基于STM8的TIM定时器操作---STM8-第三章
1. 综述 STM8S提供三种类型的 TIM 定时器:高级控制型(TIM1).通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6).它们虽有不同功能但都基于共同的架构.此共同的架 ...
- Redhat Linux 配置Xmanager
1. vi /etc/inittab id:5:initdefault: //设置系统运行级为5,如果本来就是5就无需修改 id:5:respawn:/usr/sbin/gdm //添加到最后 ...
- for update 与where current of的问题
在刚学oracle时一直不明白for update 的作用,今天考试又遇到郁闷半天,所以加以整理. 一: 1>首先for update是对表的行进行锁定.锁定就好比我们学java Thread那 ...
- 升级openssl 操作记录
openssl 是一群黑客最爱研究搞怪的一个软件为啥,据说openssl是一群数学家编写的一套算法 哈哈 好,说正事 openssl 经常发布补丁包,因为升级是避免不了的 步骤: 查看当前openss ...
- SpringBoot+Mybatis+Maven+MySQL逆向工程实现增删改查
SpringBoot+Mybatis+MySQL+MAVEN逆向工程实现增删改查 这两天简单学习了下SpringBoot,发现这玩意配置起来是真的方便,相比于SpringMVC+Spring的配置简直 ...
- js实现选中div内容并复制到剪切板
function copyUrl () { var div = document.getElementById('xxxx'); if (document.body.createTextRange) ...
- kvm 虚机环境碰到的两个小坑
1)当部署一个商用VA的时候,出现virsh version|grep "Using library" 返回错误,经过查看,发现里面有汉字,猜应该是这个原因导致无法检索到libvi ...
- Linux 添加新分区和 移动 /home到新挂载分区
https://blog.csdn.net/lyd135364/article/details/78623119 https://www.cnblogs.com/saszhuqing/p/871664 ...
- 0 Python学习计划
每天一小节,坚持水滴石穿. 2019-4-1 景略