这算是开博客以来的第一篇正式的文章了,献给Leetcode和鹅厂…
自从上了研究生,一天比一天忙,苦逼啊…所以开这个系列的坑一方面提醒自己忙实验室的项目的同时也要多做做算法题,督促一下自己;另一方面也希望和各位多多交流,随便就当刷题总结了_(:з」∠)_
231. 2的幂(Power of Two)
- 题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。、
- 解题思路:
(1)2次幂的问题一般会往左移运算<
(相当于对无符号数x2)与右移运算>
(相当于对无符号数÷2)。例如矩阵快速幂算法有很好的体现
(2)题目中有个小坑就是整数是包含负数的,而2的幂最小为1
class Solution {
public boolean isPowerOfTwo(int n) {
if(n<=0) return false;
while((n>>1)>0){
if((n&1)==1){
return false;
}
n=n>>1;
}
return true;
}
}
136. 只出现一次的数字(Single Number)
- 题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
- 解题思路:(这个题以前见过,直接给方案)
对于异或运算^
(按位取异或操作)有如下性质
A⊕0=AA\oplus 0=AA⊕0=A
A⊕A=0A\oplus A=0A⊕A=0
由此可得
A⊕B⊕A=BA\oplus B \oplus A=BA⊕B⊕A=B
class Solution {
public int singleNumber(int[] nums) {
int ans=0;
int len=nums.length;
for(int i=0;i<len;i++){
ans^=nums[i];
}
return ans;
}
}
当然继续推下去,还有一些比较好玩的结果,例如:
A⊕1=∼A(对A按位取反)A \oplus 1= \sim A(对A按位取反)A⊕1=∼A(对A按位取反)
besides,有一个很有意思的题解——https://leetcode.com/problems/single-number-ii/discuss/43302/Accepted-code-with-proper-Explaination.-Does-anyone-have-a-better-idea
题目是 [137 只出现一次的数字||]