算法练习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 ...
随机推荐
- 完成端口IOCP详解
修改自: http://blog.csdn.net/piggyxp/article/details/6922277 ps: 原作者很厉害了, 把一个iocp模型讲解的这么形象,不过在实践过程中发现一些 ...
- 一周RMAN备份脚本
#! /bin/bash#crontab---->00 20 * * 0 su - oracle -c '/scripts/oracle_full_backup.sh'#crontab----& ...
- [STM31F103]独立看门狗
独立看门狗步骤: l 取消寄存器写保护: n IWDG_WriteAccessCmd(); l 设置独立看门狗的预分频系数,确定时钟: n IWDG_SetPrescaler(); l 设置看门狗重装 ...
- Linux 系统状态检测命令
介绍快速查看Linux系统运行状态的能力(网络网卡.系统内核.系统负载.内存使用情况.启用终端数量.历史登录记录.命令执行记录.救援诊断)等命令使用方法 1.ifconfig 用于获取网卡配置和网络 ...
- Django建站+Vuejs前端
第一节 @注意 千万注意格式.标签名字: 浏览器开发者模式修改页面不显示:在开发者模式下(F12进入),打开设置页面(F1),勾选 Disable cache (while DevTools is o ...
- Ubuntu安装后上网问题,
首先VMware网络配置详解一:三种网络模式简介 http://www.cnblogs.com/gylei/archive/2012/04/06/2435087.html 很详细. 此处讲述通过桥接来 ...
- ORM版学员管理系统 3
老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 class Class(models.Model): id = models.AutoField(primary_key=Tr ...
- WPF 主窗口关闭时结束所有相关线程
程序主窗口的 Closed 事件中添加代码: Process.GetCurrentProcess().Kill();
- xcode打包命令
xcodebuild clean -workspace Myproject.xcworkspace -scheme myProject xcodebuild archive -workspace My ...
- python实战:用70行代码写了一个山炮计算器!
python实战训练:用70行代码写了个山炮计算器! 好了...好了...各位因为我是三年级而发牢骚的各位伙伴们,我第一次为大家插播了python的基础实战训练.这个,我是想给,那些python基础一 ...