LeetCode:367. Valid Perfect Square

 1 package day20170206;
 2 //LeetCode:367. Valid Perfect Square
 3 /*
 4  Given a positive integer num, write a function which returns True if num is a perfect square else False.
 5 
 6 Note: Do not use any built-in library function such as sqrt.
 7 
 8 Example 1:
 9 Input: 16
10 Returns: True
11 Example 2:
12 Input: 14
13 Returns: False
14  */
15 public class isPerfectSquare367 {
16     public static boolean isPerfectSquare(int num) {
17         for(int i=1;i<=num/2+1;i++){
18             if(i*i==num)
19                 return true;
20             else if(i*i>num)
21                 return false;
22         }
23         return false;
24     }
25     //study1   1+3+5+...+(2n-1)=n^2
26     public static boolean isPerfectSquare2(int num){
27         for(int i=1;num>0;i+=2){
28             num-=i;
29         }
30         return num==0;
31     }
32     //study2 binary search
33     public static boolean isPerfectSquare3(int num){
34         int left=1,right=num;
35         if(num<1)
36             return false;
37         while(left<=right){
38             int mid=left+(right-left)/2;
39             if(mid*mid==num){
40                 return true;
41             }
42             else if(mid*mid>num){
43                 right=mid-1;
44             }else{
45                 left=mid+1;
46             }
47         }
48         return false;
49     }
50     //Newton Method 
51     public static boolean isPerfectSquare4(int num){
52         if(num<0)
53             return false;
54         int n=num/2;
55         while(n*n>num){
56             n=(n+num/n)/2;
57         }
58         return n*n==num;
59     }
60     
61     
62     public static void main(String[] args) {
63         // TODO Auto-generated method stub
64         System.out.println(isPerfectSquare(16));
65         System.out.println(isPerfectSquare(11));
66         System.out.println(isPerfectSquare(1));
67         
68         System.out.println(isPerfectSquare2(16));
69         System.out.println(isPerfectSquare2(11));
70         System.out.println(isPerfectSquare2(1));
71 
72         System.out.println(isPerfectSquare3(16));
73         System.out.println(isPerfectSquare3(11));
74         System.out.println(isPerfectSquare3(1));
75 
76     }
77 
78 }

 

转载于:https://www.cnblogs.com/luluqiao/p/6372756.html

给定一个整数数组 nums 和一个目标值 target,要求在数组中找出两个数的和等于目标值,并返回这两个数的索引。 思路1:暴力法 最简单的思路是使用两层循环遍历数组的所有组合,判断两个数的和是否等于目标值。如果等于目标值,则返回这两个数的索引。 此方法的时间复杂度为O(n^2),空间复杂度为O(1)。 思路2:哈希表 为了优化时间复杂度,可以使用哈希表来存储数组中的元素和对应的索引。遍历数组,对于每个元素nums[i],我们可以通过计算target - nums[i]的值,查找哈希表中是否存在这个差值。 如果存在,则说明找到了两个数的和等于目标值,返回它们的索引。如果不存在,将当前元素nums[i]和它的索引存入哈希表中。 此方法的时间复杂度为O(n),空间复杂度为O(n)。 思路3:双指针 如果数组已经排序,可以使用双指针的方法来求解。假设数组从小到大排序,定义左指针left指向数组的第一个元素,右指针right指向数组的最后一个元素。 如果当前两个指针指向的数的和等于目标值,则返回它们的索引。如果和小于目标值,则将左指针右移一位,使得和增大;如果和大于目标值,则将右指针左移一位,使得和减小。 继续移动指针,直到找到两个数的和等于目标值或者左指针超过了右指针。 此方法的时间复杂度为O(nlogn),空间复杂度为O(1)。 以上三种方法都可以解决问题,选择合适的方法取决于具体的应用场景和要求。如果数组规模较小并且不需要考虑额外的空间使用,则暴力法是最简单的方法。如果数组较大或者需要优化时间复杂度,则哈希表或双指针方法更合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值