首页 > 其他分享 >[剑指offer] 位运算篇

[剑指offer] 位运算篇

时间:2023-09-20 12:44:24浏览次数:27  
标签:return 运算 offer int res base public exponent

JZ65 不用加减乘除做加法⭐

 1 /* ^模拟不进位相加, &模拟进位(递归) */
 2 public class JZ65_1
 3 {
 4     public static int Add(int num1, int num2)
 5     {
 6         if (num2 == 0) return num1;
 7         return Add(num1 ^ num2, (num1 & num2) << 1);
 8     }
 9 }
10 
11 /* ^模拟不进位相加, &模拟进位(非递归) */
12 public class JZ65_2
13 {
14     public static int Add(int num1, int num2)
15     {
16         int add = num1 ^ num2;
17         int up = (num1 & num2) << 1;
18         while (up != 0)
19         {
20             add = add ^ up;
21             up = ((add ^ up) & up) << 1;
22         }
23         return add;
24     }
25 }

JZ15 二进制中1的个数

 1 /* 模拟1 */
 2 public class JZ15_1
 3 {
 4     public static int NumberOf1(int n)
 5     {
 6         int res = 0;
 7         while (n != 0)
 8         {
 9             if ((n & 1) == 1)
10                 res++;
11             n >>>= 1;
12         }
13         return res;
14     }
15 }
16 
17 /* ⭐模拟2⭐ */
18 public class JZ15_2
19 {
20     public static int NumberOf1(int n)
21     {
22         int res = 0;
23         while (n != 0)
24         {
25             n = n & (n - 1);
26             res++;
27         }
28         return res;
29     }
30 }
31 
32 /* 模拟3 */
33 public class JZ15_3
34 {
35     public static int NumberOf1(int n)
36     {
37         int res = 0;
38         for (int i = 0; i < 32; i++)
39         {
40             if ((n & (1 << i)) != 0)
41                 res++;
42         }
43         return res;
44     }
45 }
46 
47 /* 模拟4 */
48 public class JZ15_4
49 {
50     public static int NumberOf1(int n)
51     {
52         String s = Integer.toBinaryString(n);
53         return (int) s.chars().filter(c -> c == '1').count();
54     }
55 }

JZ16 数值的整数次方

 1 /* 减治 */
 2 public class JZ16_1
 3 {
 4     public static double Power(double base, int exponent)
 5     {
 6         if (exponent == 0)
 7             return 1;
 8         else if (exponent == 1)
 9             return base;
10         if (exponent == -1)
11             return 1.0 / base;
12         double half = Power(base, exponent / 2);
13         return half * half * Power(base, exponent % 2);
14     }
15 }
16 
17 /* 快速幂 */
18 public class JZ16_2
19 {
20     public static double Power(double base, int exponent)
21     {
22         if (exponent < 0)
23         {
24             base = 1 / base;
25             exponent = -exponent;
26         }
27         return quick(base, exponent);
28     }
29 
30     public static double quick(double base, int exponent)
31     {
32         double ans = 1;
33         while (exponent != 0)
34         {
35             if (exponent % 2 == 1) ans *= base;
36             exponent /= 2;
37             base *= base;
38         }
39         return ans;
40     }
41 }

JZ56 数组中只出现一次的两个数字⭐

 1 /* hash */
 2 public class JZ56_1
 3 {
 4     public static int[] FindNumsAppearOnce(int[] nums)
 5     {
 6         HashMap<Integer, Object> map = new HashMap<>();
 7         int[] res = new int[2];
 8         for (int num : nums)
 9         {
10             if (map.containsKey(num))
11                 map.remove(num);
12             else
13                 map.put(num, null);
14         }
15         ArrayList arrayList = new ArrayList(map.keySet());
16         res[0] = (int) arrayList.get(0);
17         res[1] = (int) arrayList.get(1);
18         return res;
19     }
20 
21 }
22 
23 /* 根据只出现一次的两个数字的异或结果的"1"位置作为分组条件 */
24 public class JZ56_2
25 {
26     public static int[] FindNumsAppearOnce(int[] nums)
27     {
28         int res1 = 0, res2 = 0, temp = 0, flag = 1;
29         for (int num : nums)
30             temp ^= num;
31         while (((temp & flag) ^ flag) != 0)
32             flag <<= 1;
33         for (int num : nums)
34         {
35             if ((num & flag) == 0)
36                 res1 ^= num;
37             else
38                 res2 ^= num;
39         }
40         return new int[]{Math.min(res1, res2), Math.max(res1, res2)};
41     }
42 }

JZ64 求1+2+3+...+n

1 /* 这题意义不大 */
2 public class JZ64_1
3 {
4     public static int Sum_Solution(int n)
5     {
6         boolean b = (n != 0) && ((n += Sum_Solution(n - 1)) > 0);
7         return n;
8     }
9 }

标签:return,运算,offer,int,res,base,public,exponent
From: https://www.cnblogs.com/VividBinGo/p/17717039.html

相关文章

  • Python 运算符
    1.算数运算符运算符描述实例+加1+1输出结果:2-减1-1输出结果:0*乘2*2输出结果:4/除10/2输出结果:5//取整9//4输出结果:2%取余9%4输出结果:1**指数2**4输出结果:16()小括号优先运算:(1+2)*2结果:6注意:混合......
  • 基础高精度算法:高精度四则运算
    #if1#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;vector<int>add(vector<int>A,vector<int>B){vector<int>C;intt=0;for(inti=0;i<A.size()||i&l......
  • 2023.9.19 二年级四则运算在线答题
    packageTest2333;importjava.util.Random;importjava.util.Timer;importjava.util.TimerTask;importjava.util.Scanner;publicclassdaily1{//设置时长(秒)staticintcountDownTime=100;publicstaticvoidmain(String[]args){Scannersc=n......
  • 《剑指Offer》-21-调整数组顺序使奇数位于偶数前面
    第一想法是双指针,一个指针用于遍历,一个指针用于标记奇数和偶数的分界,而调整位置则通过交换来实现思路来自于快排代码,分隔指针+交换,也算是双指针? vector<int>exchange(vector<int>&nums){ //一个遍历指针,一个分隔指针,odd指向第一个偶数 intodd=0; for(inti=0;i......
  • 《剑指Offer》-34-二叉树中和为某一值的路径
    思路要求是从根节点开始的路径,这会比从任意节点开始的路径简单很多思路是从根节点开始遍历每一条路径,如果和没有达到目标值就继续向下遍历大于就回退,等于就返回到结果集中,可以看到这是一个回溯动作实际过程中,首先不管是等于还是大于,回退pop()操作都要执行,这样才不会影响到后......
  • SQL 运算符
    每个数据库管理员和用户都使用SQL查询来操作和访问数据库表和视图的数据。数据的操作和检索是在保留字和字符的帮助下进行的,用于执行算术运算、逻辑运算、比较运算、复合运算等。什么是SQL运算符?SQL保留字和字符称为运算符,它们与SQL查询中的WHERE子句一起使用。在SQL......
  • 剑指Offer面试题7:重建二叉树
    一、题目给定节点数为n的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length== pre.length2.pre和vin 均无重复元素3.vin出现的元素均出现在 ......
  • 认识谷歌搜索运算符
    Google搜索支持多种搜索运算符,您可以使用这些搜索运算符优化或定位搜索。此外,以下搜索运算符还能在调试网站时发挥作用。例如,site: 搜索运算符可用于监控网站上的垃圾评论,而图片搜索运算符 imagesize: 可用于查找网站上的小图片。下表列出了可用于在Google搜索结果中检查网页......
  • 谷歌的site: 搜索运算符
    site: 查询是一个搜索运算符,您可以使用它请求来自运算符中指定的特定网域、网址或网址前缀的搜索结果。例如:site: 示例site:example.com仅显示来自 example.com 网域(www.example.com 和 recipes.example.com)的结果。site:https://www.example.com/ramen tsukemen显示包含以......
  • 剑指Offer面试题6:从尾到头打印链表
    一、题目输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]二、题解看到这题很多人第一反应是从头到尾输出会比较简单,于是我们很自然想到把链表中的节点指针反过来,改变链表结构就可以从头到尾输出了。但该方法......