LeetCode题解_阳光的碎屑的博客-程序员秘密

技术标签: 经验分享  数据结构与算法  

剑指Offer

剑指 Offer 04. 二维数组中的查找

Go题解:

func findNumberIn2DArray(matrix [][]int, target int) bool {
    
	//边界条件判断
	if len(matrix) == 0 {
    
		return false
	}
	//二维数据的大小:长、宽
	n := len(matrix)
	m := len(matrix[0])
	//设置初始遍历元素的位置,数组的右上角matrix[n-1][0]
	i, j := n-1, 0
	//从右上角开始遍历元素
	for i >= 0 && j < m {
    
		if matrix[i][j] == target {
    
			return true
		}
		if matrix[i][j] > target {
    
			i--
		} else if matrix[i][j] < target {
    
			j++
		}
	}
	return false
}

11. 旋转数组的最小数字

//直接排序求解
class Solution {
    
    public int minArray(int[] numbers) {
    
        Arrays.sort(numbers);
        return numbers[0];
    }
}

03. 数组中重复的数字

题目描述:找出数组当中重复的数字
解决思路:用集合保存出现过的数字,利用集合当中的数据是非重复的判断重复出现的数字。

  • Java题解
class Solution {
    
   public int findRepeatNumber(int[] nums) {
    
        Set<Integer> set = new HashSet<>();
        int repeat = -1;
        for (int num : nums) {
    
            if (!set.add(num)) {
    
                repeat = num;
                break;
            }
        }
        return repeat;
   }
}

09. 用两个栈实现队列

问题描述:用两个栈模拟实现一个队列
解题思路:用 一个栈作为添加数据使用,另一个栈用作删除数据、模拟出队列使用

  • Java题解
class CQueue {
    

    private Stack<Integer> addStack;
    private Stack<Integer> delStack;

    public CQueue() {
    
        addStack = new Stack<>();
        delStack = new Stack<>();
    }

    public void appendTail(int value) {
    
        addStack.push(value);
    }

    public int deleteHead() {
    
        //两个栈都为空,则返回-1
        if (addStack.isEmpty() && delStack.isEmpty()) {
    
            return -1;
        }
        if (!delStack.isEmpty()) {
    
            return delStack.pop();
        }
        while (!addStack.isEmpty()) {
    
            int val = addStack.pop();
            delStack.push(val);
        }
        return delStack.pop();
    }
}

10- I. 斐波那契数列

问题描述:求斐波那契(Fibonacci)数列的第 n 项。
题解:利用动态规划的算法进行解决。关键在于求出状态转移方程

  • Java题解

/**
 * 理解动态规划的思想
 * 斐波那契数列: 0,1,1,2,3,5
 * 下标:         0,1,2,3,4,5
 *  ----------------------------------------
 *  个例演算:n = 5
 *  序号  a    b   sum
 *  0     0    1    1
 *  1     1    1    2
 *  2     1    2    3
 *  3     2    3    5
 *  4     3    5    7
 *  5     5    7    12
 *  所以最终经过5次运算返回结果 a 的值
 */
class Solution {
    
    public int fib(int n) {
    
        int a = 0, b = 1, sum;
        for (int i = 0; i < n; i++) {
    
            sum = (a + b) % (1000000007);
            a = b;
            b = sum;
        }
        return a;
    }
}

10- II. 青蛙跳台阶问题

/**
 * 斐波那契数列
 * 剑指 Offer 10- II. 青蛙跳台阶问题
 * 动态规划的思想:由动态转移方程入手
 * 1: 1
 * 2: 11 2
 * 3: 111  12  21
 */
class Solution {
    
    public int numWays(int n) {
    
        int a = 1, b = 1, sum;
        for (int i = 0; i < n; i++) {
    
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38454776/article/details/109633145

智能推荐

LCM:高通 LK kernel 流程分析_高通lcm开机流程_ZK悟空的博客-程序员秘密

以下几幅图是最近的一段时间对自己模块LCM的一些总结,目前只是完成了一部分,而且描述的不是特别到位,后期会不断更新和修改的。第一幅是LCM的总体移植框架和组件图。介绍了LCM驱动的分部和调试屏的步骤和要点。分lk和kernel两个部分,具体哪些.c,如何添加一块新屏,大体的步骤和方法。第二幅图是屏的初始化流程图,分为lk和kernel两部分。Lk部分如下所示:系统起来的时候会调用 boo...

wordpress排版插件_16个最佳WordPress排版插件,可改善您的设计_cumyupx7788305的博客-程序员秘密

wordpress排版插件Are you looking for a WordPress typography plugin to improve your design? Typography plays an important role in web design. It improves readability and the time users spend on your websit...

NO.66——人工智能学习:python实现一致代价搜索算法_one named slash的博客-程序员秘密

目的: 在广度优先算法上进行进化。一致代价搜索算法每次扩展的是当前路径消耗g(n)最小的节点n。源码:数据结构:frontier : 边缘,存储未扩展的节点。通过维护一个优先级队列,按路径损耗来排列。 explored :探索集,保存已访问的节点。算法流程:如果边缘为空,则返回失败。操作:EMPTY?(frontier) 否则从边缘中选择...

老赖的未来生活,竟然是这样!_zhangzning的博客-程序员秘密

近期,“教科书式老赖”黄淑芬案件,引起了广泛关注。 “老赖”,也被称为失信被执行人。针对部分人失信的情况,相关法律在不断完善。2013年,最高法院出台相关司法解释建立了失信被执行人名单库。失信被执行人名单信息将被整合至被执行人的信用档案中,并以信用报告的形式向金融机构等单位提供,供有关单位在贷款等业务审核中予以衡量考虑。名单涵盖了社会各行各业的“老赖”。数据显示,截

【Web篇】(6.3) ❀ 08. 跨站脚本 - 反射型XSS ❀ FortiWeb 攻防演练_反射型跨站脚本_飞塔老梅子的博客-程序员秘密

  【简介】跨站脚本(Cross-site scripting,简称:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。从而使目标计算机收到危害。...

微信小程序云开发智能人机聊天室(可以语音转文字 文字转语音的)_ঞ᭄阿້໌ᮩ莲໌້ᮨꦿ的博客-程序员秘密

jsconst app = getApp();//引入插件:微信同声传译const plugin = requirePlugin('WechatSI');//获取全局唯一的语音识别管理器recordRecoManagerconst manager = plugin.getRecordRecognitionManager();const db = wx.cloud....

随便推点

OC高级编程iOS内存管理-第1章-自动引用计数_小凡几多的博客-程序员秘密

自动引用计数1.1 什么是自动引用计数 ARC和MRC的区别: MRC:(Manual Reference Counting)也就是非ARC,在Xcode4之前,Object_C的内存管理就需要开发人员手动维护。 ARC:(Automatic Reference Counting)也就是ARC,翻译成中文就是:【自动引用计数】,不需要开发人员手动维护,系统会在合适...

无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。..._choujiabang1843的博客-程序员秘密

无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 在使用sqlite数据库的时候遇到的,这里做个总结; 在项目里添加 现有项 把SQLite.Interop.DLL文件添加进来,然后点击属性 修改一...

Verilog语法(不可综合)_writememh可以指定格式吗_一起拼,一起加油的博客-程序员秘密

1.只有寄存器类型变量才能在initial内部被赋值。 2.verilog系统任务 (1):finish/finish/finish/stop finish:如果遇到finish:如果遇到finish:如果遇到finish,仿真器完成仿真并退出。 stop:当遇到stop:当遇到stop:当遇到stop,仿真器停止仿真,但不退出,同时提供一个命令提示符,在命令提...

ng-zorro组件库里使对话框Modal的确认取消按钮隐藏_蒲公英的博客-程序员秘密

写“查看”功能时,不想要这两个按钮添加[nzFooter]=null就行 &lt;nz-modal id="see" [(nzVisible)]="isVisible" nzTitle="标题" (nzOnCancel)="handleCancel()" [nzFooter]=null style="width:80%" &gt;……&lt;/nz-modal&gt;(nzOnC...

Cesium.knockout使用_cesium.knockout.applybindings_来了-小老弟的博客-程序员秘密

前言:Cesium.knock能够使Cesium球体监听html控件, 从而根据控件的值实时改变一些地图属性.如图, Cesium的标注聚合功能, Cesium能够根据html控件输入的像素范围, 最小簇聚, 实时改变标注的范围和大小.分四步使用1、完整代码如下&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &...

Git - 使用2_嗯嗯**的博客-程序员秘密

文章目录语法1. 分支1. 分支的查看、切换、创建、删除2. 隐藏工作区修改内容3. 合并分支2. 远程公有仓库1. 语法使用2. 异常error3. 远程私有仓库 - 自己买的服务器语法分支名:指向该分支名的最新commit版本Head指针:指向当前所在分支的最新commit版本 – head指针跟着当前分支指针  1. 分支  由一下图描述分支的版本机制 → 当前分支在哪,...