请实现无重复数字的升序数组的二分查找
描述:
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1
进阶:时间复杂度 O(\log n)O(logn) ,空间复杂度 O(1)O(1)
示例1:
输入: [-1,0,3,4,6,10,13,14],13
返回值: 6
说明: 13 出现在nums中并且下标为 6
示例2:
输入:[],3
返回值: -1
说明: nums为空,返回-1
示例3:
输入:[-1,0,3,4,6,10,13,14],2
返回值: -1
说明: 2 不存在nums中因此返回 -1
代码实现
public static int search (int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int left = 0,right = nums.length-1;
while(left <= right){
int mid = left+(right-left)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] < target){
left = mid+1;
}else if(nums[mid] > target){
right = mid-1;
}
}
return -1;
}
求猴子大王
描述:15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?
代码实现:
public static void main(String[] args) {
//创建数组长度为15,模拟15只猴子
boolean[] a = new boolean[15];
for (int i = 0; i < a.length; i++) {
a[i] = true;//当值为true时,代表猴子未淘汰,false为已淘汰
}
int num = 0;//定义数字的大小
int monkeyLeft = 15;//定义未淘汰的猴子数
int index =0;//定义猴子的下标
while(monkeyLeft > 1){
if(a[index]){
num++;
if(num%7 == 0){
a[index] = false;
monkeyLeft--;
num = 0;
}
}
index++;
if(index == 15){
index = 0;
}
}
for(int i = 0;i<a.length;i++){
if (a[i] == true){
System.out.println("第"+(i+1)+"只猴子是大王");
}
}
}
求水仙花数
水仙花数:是指一个三位数,其各位数字立方和等于该数字本身
例如:153就是一个水仙花数,因为153 = 1³ + 5³ + 3³
代码实现:
public static void main(String[] args) {
for (int i = 100; i < 1000;i++){
if (getAim(i)){
System.out.println(i);
}
}
}
public static boolean getAim(int i){
int a,b,c;
a = i/100;
b = i%100/10;
c = i%100%10;
if((a*a*a+b*b*b+c*c*c) == i){
return true;
}
return false;
}
求1000以内的完数
完数:如果一个数等于其所有因子之和,我们就称这个数为"完数",比如6的因子为1,2,3 6 = 1 + 2 + 3,那么6就是一个完数
代码实现
public static void main(String[] args) {
for (int i=1;i<=1000;i++){
if(getIndex(i)){
System.out.println(i);
}
}
}
public static boolean getIndex(int x){
int sum = 0 ;
for(int i =1 ; i <= x/2;i++){
if(x%i ==0){
sum+=i;
}
}
if(sum == x) {
return true;
}
return false;
}
求阶乘后面0的个数
如:5! 1个
10! 2个
代码实现
public static int trailingZeroes(int n) {
int count = 0;
while(n >=5){
count += n / 5;
n /= 5;
}
return count;
}