2022-3-13 剑指offer day31


题1:

JZ16 数值的整数次方

描述

实现函数 double Power(double base, int exponent),求base的exponent次方。   注意: 1.保证base和exponent不同时为0。 2.不得使用库函数,同时不需要考虑大数问题 3.有特殊判题,不用考虑小数点后面0的位数。   数据范围: |base| \le 100 \∣base∣≤100  , |exponent| \le 100 \∣exponent∣≤100  ,保证最终结果一定满足 |val| \le 10^4 \∣val∣≤104 
进阶:空间复杂度 O(1)\O(1)  ,时间复杂度 O(n)\O(n) 
 1 public class Solution {
 2     public double Power(double base, int exponent) {
 3         if (exponent<0) {
 4             base=1/base;
 5             exponent=-exponent;
 6         }
 7         double ans=1.0;
 8         for (int i=0;i){
 9             ans*=base;
10         }
11         return ans;
12         
13   }
14 }

思路:负指数转化为正指数,暴力计算。

题2:

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

描述

一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。   数据范围:数组长度 2\le n \le 10002≤n≤1000,数组中每个数的大小 0 < val \le 10000000<val≤1000000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
  提示:输出时按非降序排列。
 1 import java.util.*;
 2 
 3 
 4 public class Solution {
 5     /**
 6      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 7      *
 8      * 
 9      * @param array int整型一维数组 
10      * @return int整型一维数组
11      */
12     public int[] FindNumsAppearOnce (int[] array) {
13         // write code here
14         int x=0;
15         for (int i:array){
16             x^=i;
17         }
18         // x为两个数异或的值
19         //根据异味为为1的位置分组,相同的数会分到一组,这两个不同的数会分到不同的组
20         int divide=1;
21         while ((x÷)==0) {
22             divide<<=1;
23         }
24         int a=0,b=0;
25         for (int t:array) {
26             if ((t÷)==0) {
27                 a^=t;
28             }else b^=t;
29         }
30         if (a>=b) return new int[]{b,a};
31         return new int[]{a,b};
32     }
33 }

思路:一个不同的数字用异或,两个数字根据不同位为1的分组,再异或 ,分别求出来。

相关