LC50. Pow(x, n)
//本道题目掉入陷进就是不断重复N次进行一个求解,然而超时了。其实求一个n次幂可以采取一个快速幂模板,也就是说我每次都求底数的平方那么x的64次方只需要求6次即可。
class Solution {
public double myPow(double x, int n) {
//定义结果
double sum = 1;
//转换为long是因为如果是Integer.MIN_VALUE转为负数会越界
long b = n;
//计算n次幂可以转换成快速幂模板
//不断求平方减小计算的次数,这样本来64的平方只需要求6次即可不用64次
//如果指数小于0先转换底数再将指数转为正数
if(b < 0){
x = 1 / x;
b = -b;
}
while(b > 0){
//如果当前的指数为奇数那么要多乘一个底数
if(b % 2 == 1) sum *= x;
x *= x;
//指数向下取整除以2,相当于该数右移一位
b >>= 1;
}
return sum;
}
}
LC739. 每日温度
//那么也就是说单调栈而言就是栈底到栈顶的方向递减就是单调递减栈,递增就是单调递增栈,维护一个单挑递减的栈从栈底到栈顶温度以此递减。如果一个下标还在单调栈当中那么也就是说没有找到对应比栈顶大的温度。
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int length = temperatures.length;
//此时的栈存放的是数组下标的位置,并且是单调递减栈
//从栈底到栈顶都是递减的
Deque<Integer> stack = new LinkedList();
int[] result = new int[length];
for(int i = 0;i < length;i++){
//如果当前栈不为空并且当前的元素大于栈顶的元素的话
//弹出栈顶元素
while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
//那么记录栈顶当前天数过了多少天以后才有更高的温度
int pre = stack.pop();
//过了i-pre天
result[pre] = i - pre;
}
stack.push(i);
}
return result;
}
}
LC剑指 Offer 27. 二叉树的镜像
//头一次20s做了出来哈哈哈哈哈哈哈简单题我重拳出击,没什么好说的模板就完事了
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root == null)
return null;
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
mirrorTree(root.left);
mirrorTree(root.right);
return root;
}
}