Bit Manipulation and Number
位运算,数字和数学类的题目
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ28 数组中出现次数超过一半的数字
这道题最简单的方法是摩尔投票法:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/solution/mian-shi-ti-39-shu-zu-zhong-chu-xian-ci-shu-chao-3/代码如下:public class Solution { public int MoreThanHalfNum_Solution(int [] arra.原创 2020-09-07 01:28:54 · 100 阅读 · 0 评论 -
JZ12 数值的整数次方
首先需要讨论各种case:如果 base == 0, 直接返回本身; 如果 exponent < 0, base取倒数,exponent取相反数;再通过一个循环,得到 base ^ exponent。代码如下:public class Solution { public double Power(double base, int exponent) { // Corner Case if(base == 0){ return原创 2020-08-27 12:03:18 · 134 阅读 · 0 评论 -
JZ11 二进制中1的个数
每次和1做按位与运算,如果得到的是1那么count就加1,然后再无符号右移一位。代码如下:public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ if((n & 1) != 0){ count++; } n = n >>>原创 2020-08-27 11:39:36 · 84 阅读 · 0 评论 -
HJ6 质数因子
import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ long n = sc.nextLong(); long k = 2; while(k <= n){ .原创 2020-08-08 12:03:19 · 820 阅读 · 0 评论 -
HJ5 进制转换
这道题需要注意的点是要从第2位开始读取数字,因为开头两个是0x。代码如下:import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ int sum = 0; String s = sc.nex原创 2020-08-08 10:10:56 · 431 阅读 · 0 评论 -
LeetCode 342. Power of Four
class Solution { public boolean isPowerOfFour(int num) { while((num > 0) && (num % 4 == 0)){ num /= 4; } return num == 1; }}原创 2020-08-06 09:34:13 · 65 阅读 · 0 评论 -
Leetcode 231/326/342. Power of Two/Three/Four
这类题都可以用一种recursive的方法去解决,下面以342为例:首先是Base Case: 如果 num <= 0, 则num不是4的幂;如果num == 1,则num是4的幂.然后是Recursive Rule: 如果num不是4的倍数,则num不是4的幂;如果num是4的倍数,则继续检查num / 4是否为4的幂。class Solution { public boolean isPowerOfFour(int num) { if(num <= 0)原创 2020-06-05 11:02:34 · 112 阅读 · 0 评论 -
LeetCode 136. Single Number
class Solution { public int singleNumber(int[] nums) { int res = 0; for(int i = 0; i < nums.length; i++){ res ^= nums[i]; } return res; }}原创 2020-07-26 15:03:31 · 65 阅读 · 0 评论 -
LeetCode 13. Roman to Integer
我们可以每次跟前面的数字比较,如果小于等于前面的数字,先加上当前的数字,比如 "VI",第二个字母 'I' 小于第一个字母 'V',所以要加1。如果大于的前面的数字,加上当前的数字减去二倍前面的数字,这样可以把在上一个循环多加数减掉,比如 "IX",我们在 i=0 时,加上了第一个字母 'I' 的值,此时结果 res 为1。当 i=1 时,字母 'X' 大于前一个字母 'I',这说明前面的1是要减去的,而由于前一步不但没减,还多加了个1,所以此时要减去2倍的1,就是减2,所以才能得到9,整个过程是 res原创 2020-07-26 14:58:05 · 67 阅读 · 0 评论 -
LeetCode 12. Integer to Roman
class Solution { public String intToRoman(int num) { String[] M = new String[] {"", "M", "MM", "MMM"}; String[] C = new String[] {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String[] X = new String[] {"", "X", .原创 2020-07-26 14:13:53 · 70 阅读 · 0 评论 -
LeetCode 219. Contains Duplicate II
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { // Corner Case if(nums == null || nums.length == 0){ return false; } Map<Integer, Integer> seen = new HashMap<>(); .原创 2020-07-26 13:46:49 · 92 阅读 · 0 评论 -
LeetCode 220. Contains Duplicate III
可以用TreeSet来解决问题,但是为了防止溢出的问题,必须将类型强制转化成long(对应的包装类为Long)。https://leetcode-cn.com/problems/contains-duplicate-iii/solution/hua-dong-chuang-kou-er-fen-sou-suo-shu-zhao-shang-/class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, i原创 2020-07-26 13:44:29 · 71 阅读 · 0 评论 -
LeetCode 190. Reverse Bits
public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { int left = 31, right = 0; while(left > right){ // We must let n take the return value otherwise its value won't change.原创 2020-07-25 09:33:46 · 89 阅读 · 0 评论 -
LeetCode 231. Power of Two
class Solution { public boolean isPowerOfTwo(int n) { if(n <= 0){ return false; } while(n % 2 == 0){ n /= 2; } return n == 1; }}原创 2020-07-25 07:38:02 · 128 阅读 · 0 评论 -
LeetCode 191. Number of 1 Bits
public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0; // We should use n != 9 rather than n > 0 while(n != 0){ // Extract the least significant b.原创 2020-07-25 07:54:44 · 92 阅读 · 0 评论 -
LeetCode 268. Missing Number
分析由于异或运算(XOR)满足结合律,并且对一个数进行两次完全相同的异或运算会得到原来的数,因此我们可以通过异或运算找到缺失的数字。算法我们知道数组中有 n个数,并且缺失的数在 [0..n]中。因此我们可以先得到 [0..n]的异或值,再将结果对数组中的每一个数进行一次异或运算。未缺失的数在 [0..n]和数组中各出现一次,因此异或后得到 0。而缺失的数字只在 [0..n]中出现了一次,在数组中没有出现,因此最终的异或结果即为这个缺失的数字。在编写代码时,由于 [0..n]恰好是这个数组的.原创 2020-06-26 06:38:31 · 68 阅读 · 0 评论