面试经典150题【101-110】

文章目录

  • 面试经典150题【101-110】
    • 9.回文数
    • 61.加一
    • 172.阶乘后的0
    • 69.x的平方根
    • 50.Pow(x,n)
    • 149.直线上最多的点数
    • 52.N皇后II
    • 120.三角形最小路径和
    • 64.最小路径和
    • 63.不同路径II

面试经典150题【101-110】

6道偏数学的题和4道二维dp

9.回文数

一开始想转为字符串再判断。后来发现可以直接取后一半数字再判断。

class Solution {
    public boolean isPalindrome(int x) {
        //因为如果x后面出现0,后面算法会出错
        if(x<0 || x%10==0 && x!=0){
            return false;
        }
        int temp=0;
        while(temp<x){
            temp = temp*10 + x%10;
            x = x/10;
        }
        // x从1221 -> 12;  x: 12321 -> 12 <123
        return x==temp || x==temp/10;

    }
}


61.加一

在这里插入图片描述

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--){
            digits[i]++;
            digits[i] = digits[i]%10;
            if(digits[i] != 0) return digits;
        }
        //都加完了还不返回,说明是999这种
        int[] ans=new int[digits.length+1];
        ans[0]=1;
        return ans;

    }
}

直接加,最后遇到999这种则扩容。

172.阶乘后的0

在这里插入图片描述
25 = 25 *。。。 *5。。。
答案是3,看有几个5.其中25这个数字代表两个5

class Solution {
    public int trailingZeroes(int n) {
        int count=0;
        for(int i=0;i<n+1;i++){
            int temp=i;
            //最后temp会被干到0
            while(temp %5==0 && temp!=0){
                count++;
                temp =temp/5;
            }
        }
        return count;
    }
}

69.x的平方根

直接二分去搜,牛顿的数学太复杂。

50.Pow(x,n)

要将n进行二进制的拆分
在这里插入图片描述

class Solution {
    public double myPow(double x, int n) {
        if(x ==0.0f) return 0;
        long b=n;
        double res=1;
        if(b<0){
            x = 1/x;
            b = -b;
        }
        while(b>0){
            if((b&1)==1){
                res = res*x;
            }
            x =x*x;
            b = b>>1;
        }
        return res;
    }
}

149.直线上最多的点数

在这里插入图片描述
三个点,ABC,AB和BC的斜率应该一样。
暴力的话就是先确定两个点,再依次遍历其他的点,看斜率是否等于AB的斜率。
用哈希表就是,先确定一个点(N),计算与其他所有点(N)的斜率,将斜率k存储到哈希表中。取哈希表中value的最大值即可。

public class LC149 {
    public static int maxPoints(int[][] points) {

        int ans=0;
        for(int i=0;i<points.length;i++){
            HashMap<String,Integer>map =new HashMap<>();
            int[] x=points[i];
            for(int j=i+1;j<points.length;j++){
                int[] y=points[j];
                int x1=x[0],x2=y[0],y1=x[1],y2=y[1];
                int deltax = x1-x2,deltay=y1-y2;
                int gcdxy=gcd(deltax,deltay);
                String key=deltax/gcdxy +"_"+deltay/gcdxy;
                map.put(key,map.getOrDefault(key,0)+1);
                //[1,1]-[2,2],  [1,1]-[3,3]   [2,2]-[3,3]   [7,9] - [9,11]
                int value = map.get(key);
                ans =  ans=Math.max(ans,value+1);

            }
        }
        return ans;

    }
    public static int gcd(int x,int y){
        return y==0? x:gcd(y,x%y);

    }

    public static void main(String[] args) {
        int[][]points= {{1,1},{2,2},{3,3}};
        System.out.println(maxPoints(points));

    }

}

一个要注意最小公约数gcd的写法。
HashMap应该是针对于每一个 i 点的,则每一个 j 点都要统计。

52.N皇后II

在这里插入图片描述
老解法,回溯。先在每一行下棋,然后下一行,然后回溯到这一行没下。去下这一行的下一列。

public class LC52 {
    private static int ans=0;
    public static int totalNQueens(int n) {

        char[][] board=new char[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                board[i][j]='.';
            }
        }
        dfs(board,0);
        return ans;
    }
    public static void dfs(char[][] board,int row){
        if(row == board.length){
            ans++;
            return;
        }
        for(int j=0;j< board.length;j++){
            if(check(board,row,j)){
                board[row][j]='Q';
                dfs(board,row+1);
                board[row][j]='.';
            }
        }
    }
    public static boolean check(char[][]board,int row,int col){
        // 这一列
        for(int i=0;i< board.length;i++){
            if(board[i][col]=='Q') return false;
        }
        // 检查 135度角是否有皇后
        for (int i = row - 1, j = col - 1; i >=0 && j >= 0; i--, j--) {
            if (board[i][j] == 'Q') {
                return false;
            }
        }
        // 检查 45度角是否有皇后
        for(int i = row - 1, j = col + 1; i >= 0 && j < board.length; i--, j++) {
            if (board[i][j] == 'Q') {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(totalNQueens(4));
    }
}

120.三角形最小路径和

在这里插入图片描述

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        // 最后一行全是0
        int[][] dp = new int[triangle.size() + 1][triangle.size() + 1];
        for (int i = triangle.size() - 1; i >= 0; i--) {
            for (int j = 0; j <= i; j++) {
                dp[i][j] = Math.min(dp[i + 1][j], dp[i + 1][j + 1]) + triangle.get(i).get(j);
            }
        }
        return dp[0][0];

    }
}

这个是倒序的,从三角形的下边到上面。
迭代公式:
dp[i][j] = Math.min(dp[i + 1][j], dp[i + 1][j + 1]) + triangle.get(i).get(j);

64.最小路径和

在这里插入图片描述

class Solution {
    public int minPathSum(int[][] grid) {
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (i == 0 && j == 0)
                    continue;
                else if (i == 0)
                    grid[i][j] = grid[i][j - 1] + grid[i][j];
                else if (j == 0)
                    grid[i][j] = grid[i - 1][j] + grid[i][j];
                else
                    grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];
            }
        }
        return grid[grid.length - 1][grid[0].length - 1];

    }
}

这个是从上到下迭代的,迭代公式:
grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];

63.不同路径II

在这里插入图片描述

    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m=obstacleGrid.length;
        int n=obstacleGrid[0].length;
        if(obstacleGrid[0][0]==1) return 0;
        int[][] dp=new int[m][n];
        dp[0][0]=1;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(i==0 && j==0) continue;
                if(i>0 && j>0 && obstacleGrid[i][j]==0){
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
                }else if(i==0 && obstacleGrid[i][j]==0){
                    dp[i][j]=dp[i][j-1];
                }else if(j==0 && obstacleGrid[i][j]==0){
                    dp[i][j]=dp[i-1][j];
                }else{
                    //有障碍物
                    dp[i][j]=0;
                }
            }
        }
        return dp[m-1][n-1];
    }

递推公式: dp[i][j]=dp[i-1][j]+dp[i][j-1];
应该先用俩for循环初始一下第一行和第一列。然后ij都从1开始循环也蛮好的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/491467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起&#xff0c;近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族&#xff0c;Blacksuit和Ransomhub恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧是影响最严重的勒索家族&#xff0c;需要注意防范。 …

【python】flask模板渲染引擎Jinja2,通过后端数据渲染前端页面

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

基于SpringBoot和Leaflet的行政区划地图掩膜效果实战

目录 前言 一、掩膜小知识 1、GIS掩膜的实现原理 2、图层掩膜流程 二、使用插件 1、leaflet-mask介绍 2、核心代码解释 三、完整实例实现 1、后台逻辑实现 2、省级行政区划查询实现 3、行政区划定位及掩膜实现 4、成果展示 总结 前言 在之前的博客提过按空间矢量…

web服务应用术语

一、HTTP 协议详解 TCP 协议与 HTTP 协议 TCP 协议主要用于数据传输控制&#xff0c;而 HTTP 协议主要用于应用层面的数据交互。 HTTP 属于应用层协议&#xff0c;是建立在 TCP 协议基础之上的&#xff0c;HTTP 协议以客户端请求和服务器端响应为标准&#xff0c;浏览器通常称…

智慧公厕,让数据和技术更好服务社会生活

智慧公厕&#xff0c;作为智慧城市建设中不可忽视的一部分&#xff0c;正逐渐受到越来越多人的关注。随着科技的不断进步&#xff0c;智能化公厕已经成为一种趋势&#xff0c;通过数据的流转和技术的整合&#xff0c;为社会生活带来了更好的服务。本文以智慧公厕源头实力厂家广…

C#学习笔记3:Windows窗口计时器

今日继续我的C#学习之路&#xff0c;今日学习自己制作一个Windows窗口计时器程序&#xff1a; 文章提供源码解释、步骤操作、整体项目工程下载 完成后的效果大致如下&#xff1a;&#xff08;可选择秒数&#xff0c;有进度条&#xff0c;开始计时按钮等&#xff09; &#xf…

宝塔面板操作一个服务器域名部署多个网站

此处记录IP一样&#xff0c;端口不一样的操作方式&#xff1a; 宝塔面板操作&#xff1a; 1、创建第一个网站&#xff1a; 网站名用IP地址&#xff0c;默认80端口。 创建好后&#xff0c;直接IP访问就可以了。看到自带的默认首页 2、接下来部署第二个网站&#xff1a; 仍然是…

HCIP—BGP路由发布

R1和R2&#xff0c;R4和R5建立EBGP对等体 R1和R2&#xff08;R4和R5&#xff09;之间属于EBGP对等体&#xff0c;可以使用直连物理接口建立对等体关系&#xff0c;TTL值默认1。由于使用直连物理接口方式建立&#xff0c;刚好一跳到达。 [R1]bgp 100 [R1-bgp]router-i…

【教程】PLSQL查看表属性乱码解决方法

一、前言 PL/SQL是Oracle数据库的编程语言&#xff0c;用于编写存储过程、触发器、函数等。 今天用plsql想查看表的属性&#xff0c;看看各个字段的注释&#xff0c;可是打开一看&#xff0c;居然是乱码的&#xff0c;如下面这样 如果在使用PL/SQL查看表属性时出现乱码&…

uniapp开发小程序遇到的问题,持续更新中

一、uniapp引入全局scss 在App.vue中引入uni.scss <style lang"scss">/* #ifndef APP-NVUE */import "uni.scss";/* #endif */ </style>注意&#xff1a;nvue页面的样式在编译时&#xff0c;有很多样式写法被限制了&#xff0c;容易报错。所…

R语言随机抽取数据,并作两组数据间t检验,并保存抽取的数据,并绘制boxplot

前提&#xff1a;接着上述R脚本输出的seed结果来选择应该使用哪个seed比较合理&#xff0c;上个R脚本名字&#xff1a; “5utr_计算ABD中Ge1和Lt1的个数和均值以及按照TE个数小的进行随机100次抽样.R” 1.输入数据&#xff1a;“5utr-5d做ABD中有RG4和没有RG4的TE之间的T检验.c…

LeetCode 面试经典150题 383.赎金信

题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 思路&#x…

TransE

知识图谱嵌入表示实战——基于TransE、Pytorch的知识图谱嵌入项目&#xff08;源代码和运行实例&#xff09;_transe pytorch-CSDN博客文章浏览阅读4.1k次&#xff0c;点赞16次&#xff0c;收藏89次。知识图谱常用的嵌入方法主要有TransE、TransH、TransR、RESCAL、DistMult、C…

【贪心]【字符串】【分类讨论】420 强密码检验器

本文涉及知识点 贪心 字符串 分类讨论 LeetCode420 强密码检验器 满足以下条件的密码被认为是强密码&#xff1a; 由至少 6 个&#xff0c;至多 20 个字符组成。 包含至少 一个小写 字母&#xff0c;至少 一个大写 字母&#xff0c;和至少 一个数字 。 不包含连续三个重复字…

SQL Server 存储过程——SQL Server 储存过程的创建与使用

任务描述 本关任务&#xff1a;学习 SQL Server 中存储过程的创建和使用。 相关知识 存储过程提供了很多 T-SQL 语言没有的高级特性&#xff0c;其传递参数和执行逻辑的能力&#xff0c;为处理各种复杂任务提供了支持。并且&#xff0c;由于存储过程是经过编译后&#xff0c…

云手机:实现便携与安全的双赢

随着5G时代的到来&#xff0c;云手机在各大游戏、直播和新媒体营销中扮演越来越重要的角色。它不仅节约了成本&#xff0c;提高了效率&#xff0c;而且在边缘计算和云技术逐渐成熟的背景下&#xff0c;展现出了更大的发展机遇。 云手机的便携性如何&#xff1f; 云手机的便携性…

奇偶校验|ECC内存|海明码

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;本篇文章给大家介绍数据出错和有什么方法能减少出错。 单比特翻转 由于硬件故障或其他原因&#xff0c;内存或其他存储设备中的单个比特位发生随机变化的现象。 例如&#xff0c;原本存储为1的位可能变为0&#xff0c;或…

Git入门(Git快速下载,安装,配置,远程仓库,本地仓库,IDEA提交代码,VScode提交代码使用方案一体)

Git快速下载 通过阿里镜像可以自由挑选版本并快速下载CNPM Binaries Mirrorhttp://npm.taobao.org/mirrors/git-for-windows/ 这里安装最新版本 下载安装文件 安装完后双击文件即可开始安装git 安装 git的安装傻瓜式Next即可 配置 打开git&#xff1a;桌面空白处右击&#…

雷卯推荐多种系列汽车级TVS供您选择

1. 车规级TVS的应用 2.车规级TVS系列表格如下 3.方案推荐 12V汽车电源浪涌保护方案 方案优点&#xff1a;用于满足前装汽车的ISO7637-2 5A5BA测试&#xff0c;可采用单独大功率的TVS或PTCTVS的组合方案&#xff0c;满足ISO10605-2&#xff0c; 等级4&#xff0c;接触放电15K…

Python包管理工具 pip 及其常用命令和参数用法

目录 PIP 主要功能 安装包 升级包 卸载包 列出包 检查依赖 pip的配置和环境 主要用法 1&#xff1a;版本 2&#xff1a;安装 Python 库 3&#xff1a;升级库 4&#xff1a;卸载库 5&#xff1a;搜索库 6&#xff1a;查看已安装库详细信息 7&#xff1a;只下载库…