1.重复数组
题目:给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
代码:
思路:
一,直接排序然后比较:
public static boolean containsDuplicate(int[] nums)
{
Arrays.sort(nums);
for(int i=0;i<nums.length-1;++i)
{
if(nums[i+1]==nums[i])
{
return true;
}
}
return false;
}
复杂度:
时间nlogn;k
空间longn;
法二:
利用哈希表,每次先判断,然后放入元素;
代码:
public static boolean containsDuplicate(int[] nums)
{
HashMap<Integer,Integer>p=new HashMap<>();
for(int i=0;i<nums.length;++i)
{
if(p.containsKey(nums[i]))
{
return true;
}
p.put(nums[i], i);
}
return false;
}
复杂度:
时间0(n)遍历一遍就可以了
空间0(n);
题目:3的次幂
判断一个数是不是3的整数次幂:
代码:
一直除3
如果余数不是0就不是3的倍数返回即可
public static boolean isPowerOfThree(int n)
{
if(n==1) return true;
else if(n==0) return false;
while(n!=1)
{
if(n%3!=0) return false;
n/=3;
}
return true;
}
法三:
思路:
我们发现输入的是int;
h
2147483647
用因为3是质数所以3的次幂只能被3整除,我们找到最大的质数,看看能不能整除n;
代码:
1162261467
利用这个公式计算出来
于是代码:
return n > 0 && 1162261467 % n == 0;