自己建私人网站做外贸不好做/seo公司 上海
面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台
目录
🎈1、双指针:9. 回文数
🎈2、逻辑题 :66. 加一
🎈3、逻辑题:172. 阶乘后的零
🎈4、二分模板:69. x 的平方根
🎈5、位运算:50. Pow(x, n)
🎈6、暴力模拟:149. 直线上最多的点数
🎈1、双指针:9. 回文数
给你一个整数
x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。示例 1:
输入:x = 121 输出:true示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?
class Solution {public boolean isPalindrome(int x) {String s = Integer.toString(x);char[] arr=s.toCharArray();int left=0;int right=arr.length-1;while(left<right){if(arr[left]!=arr[right]){return false;}left++;right--;}return true;}
}
🎈2、逻辑题 :66. 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。示例 3:
输入:digits = [9] 输出:[1,0] 解释:输入数组表示数字 9。 加 1 得到了 9 + 1 = 10。 因此,结果应该是 [1,0]。提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
class Solution {public int[] plusOne(int[] digits) {for(int i = digits.length - 1; i >= 0; i--){digits[i] = digits[i] + 1;if(digits[i] == 10){//当前值置0,下一位数字继续叠加digits[i] = 0;}else{return digits;}}//没有return只有可能是当前的值为99999.....,的情况,只需要new一个比原来数组大1的就可以.且把第一个元素置1,后面全0digits = new int[digits.length + 1];digits[0] = 1;return digits;}
}
🎈3、逻辑题:172. 阶乘后的零
给定一个整数
n
,返回n!
结果中尾随零的数量。提示
n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
示例 1:
输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0示例 2:
输入:n = 5 输出:1 解释:5! = 120 ,有一个尾随 0示例 3:
输入:n = 0 输出:0进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?
class Solution {public int trailingZeroes(int n) {int ans=0;//0的个数取决于5的数量while (n!=0){ans+=n/5;n/=5;}return ans;}
}
🎈4、二分模板:69. x 的平方根
给你一个非负整数
x
,计算并返回x
的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如
pow(x, 0.5)
或者x ** 0.5
。示例 1:
输入:x = 4 输出:2示例 2:
输入:x = 8 输出:2 解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
class Solution {public int mySqrt(int x) {int l=0,r=x,ans=-1;while(l<=r){int mid=(l+r)/2;// 之前写的CSDN二分模板:// https://blog.csdn.net/m0_55858611/article/details/128910634?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f0b874fdc6ea87b7d3fe64ae017dde2a%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=f0b874fdc6ea87b7d3fe64ae017dde2a&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-128910634-null-null.nonecase&utm_term=%E4%BA%8C%E5%88%86&spm=1018.2226.3001.4450/*** //二分查找最优边长* while (l <= r) {* //mid为边长* mid = (l + r) / 2;* if (check(mid)) {* //ans是用来记录count=K时的mid的* ans = mid;* l = mid + 1;* } else {* r = mid - 1;* }* }* System.out.println(ans);*/if((long)mid*mid<=x){ans=mid;l=mid+1;}else {r=mid-1;}}return ans;}
}
🎈5、位运算:50. Pow(x, n)
实现 pow(x, n) ,即计算
x
的整数n
次幂函数(即,xn
)。示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000示例 2:
输入:x = 2.10000, n = 3 输出:9.26100示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
class Solution {public double myPow(double x, int n) {//灵神题解// https://leetcode.cn/problems/powx-n/solutions/2858114/tu-jie-yi-zhang-tu-miao-dong-kuai-su-mi-ykp3i/?envType=study-plan-v2&envId=top-interview-150double ans=1;long N=n;if(N<0){N=-N;x=1/x;}while(N>0){if((N&1)==1){ans*=x;}x*=x;N>>=1;}return ans;}
}
🎈6、暴力模拟:149. 直线上最多的点数
class Solution {//暴力模拟//1 <= points.length <= 300题目给的数据量有限的情况下public int maxPoints(int[][] points) {int length=points.length;if(length<=2)return length;int ans=0;for(int i=0;i<length;i++){for(int j=0;j<i;j++){int x1=points[i][0];int y1=points[i][1];int x2=points[j][0];int y2=points[j][1];int temp=2;for(int k=0;k<j;k++){int x3=points[k][0];int y3=points[k][1];if((y3-y2)*(x2-x1)==(y2-y1)*(x3-x2)){temp++;}}ans=Math.max(ans,temp);}}return ans;}
}