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 \base100  , |exponent| \le 100 \exponent100  ,保证最终结果一定满足 |val| \le 10^4 \val104 
进阶:空间复杂度 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<exponent;i++){
 9             ans*=base;
10         }
11         return ans;
12         
13   }
14 }

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

 

题2:

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

 

描述

一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
数据范围:数组长度 2\le n \le 10002n1000,数组中每个数的大小 0 < val \le 10000000<val1000000
要求:空间复杂度 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&divide)==0) {
22             divide<<=1;
23         }
24         int a=0,b=0;
25         for (int t:array) {
26             if ((t&divide)==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的分组,再异或 ,分别求出来。

posted on 2022-03-13 12:29  阿ming  阅读(31)  评论(0)    收藏  举报

导航