20200226

题目 :旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

示例 1:
输入:[3,4,5,1,2]
输出:1示例 2:
输入:[2,2,2,0,1]
输出:0
算法流程:
循环二分: 设置 i, j 指针分别指向 numbers 数组左右两端,m = (i + j) // 2为每次二分的中点( "//" 代表向下取整除法,因此恒有i≤m<j ),可分为以下三种情况:
1. 当 numbers[m] > numbers[j]时: m 一定在 左排序数组 中,即旋转点 x 一定在 [m + 1, j] 闭区间内,因此执行 i = m + 1;
2. 当 numbers[m] < numbers[j] 时: m 一定在 右排序数组中,即旋转点 x一定在[i, m] 闭区间内,因此执行 j = m;
3. 当 numbers[m] == numbers[j] 时: 无法判断 m 在哪个排序数组中,即无法判断旋转点 x在 [i, m] 还是 [m + 1, j] 区间中。解决方案: 执行 j = j - 1 缩小判断范围;
返回值: 当 i = j 时跳出二分循环,并返回 numbers[i] 即可。

code

class Solution{public int minArray(int[] numbers){int i=0,j=numbers.length - 1;while(i < j){int m = (i+j) / 2;if(numbers[m] > numbers[j]) i = m+1;else if(numbers[m] < numbers[j]) j = m;else j--;}return numbers[i];}
}

题目 :矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。

[["a","b","c","e"],
["s","f","c","s"],
["a","d","e","e"]]

但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。

思路深度优先搜索(DFS) + 剪枝

code

class Solution{public boolean exist(char[][] board, String word){char[] words = word.toCharArray();for(int i = 0; i < board.length;i++){for(int j = 0; j < board[0].length;j++){if(dfs(board,words,i,j,0)) return true;}}return false;}private boolean dfs(char[][] board, char[] word, int i,int j, int k){if(i >= board.length || i < 0 || j >= board[0].length || j < 0 || board[i][j] != word[k]) return false;if(k == word.length - 1) return true;char tmp = board[i][j];board[i][j] = '/';//防止重复访问boolean res = dfs(board,word,i + 1, j, k + 1) || dfs(board,word, i - 1, j, k + 1) || dfs(board,word,i, j+1,k+1) || dfs(board, word,i, j-1,k+1);board[i][j] = tmp;//还原元素return res;}
}

题目 :机器人的运动范围

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?

思路 :对四个方位深度优先搜索。

code :

class Solution{int count;boolean[][] getVisited;public int movingCount(int m, int n, int k){if(m <= 0 || n <= 0 || k < 0) return 0;getVisited = new boolean[m][n];dfs(0,0,m,n,k);return count;}public void dfs(int i, int j, int m, int n, int k){if(i < 0 || j <0 || i >= m || j >= n || getVisited[i][j] == true) return;getVisited[i][j] = true;if(!canK(i,j,k)) return ;count++;dfs(i+1,j,m,n,k);dfs(i-1,j,m,n,k);dfs(i,j-1,m,n,k);dfs(i,j+1,m,n,k);}public boolean canK(int i, int j,int k){int sum = 0;while(i!=0){sum += i % 10;i /= 10;}while(j!=0){sum += j % 10;j /= 10;}return sum <= k;}
}

剑指offer-20200226相关推荐

  1. 【剑指offer】顺时针打印矩阵

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...

  2. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  3. 【每日一题】剑指 Offer 10- I. 斐波那契数列

    剑指 Offer 10- I. 斐波那契数列

  4. 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点

  5. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  6. 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。...

    弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...

  7. 剑指offer:翻转单词顺序列

    题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"st ...

  8. 剑指offer:和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  9. 剑指offer:数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 解题思路 用容器存次数. class Solution { public:void FindNu ...

  10. 剑指offer:数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

最新文章

  1. MongoDB的可视化工具
  2. 二叉树遍历的递归、非递归方法(前序、中序、后序,层序)——Java实现
  3. Python 绘图问题:Matplotlib中plt.rcParams[]使用方法 rcsetup.py matplotlibrc
  4. 光纤激光切机计算机无法启动,激光切割机不出光,如何解决?
  5. Matlab Command Window 进度提示
  6. linux 多个会话同时执行命令后history记录不全的解决方案
  7. C#创建桌面快捷方式
  8. idea报错Class not found (在target中没有生成对应的class文件)
  9. saltstack 管理mysql_saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入...
  10. python 函数式编程 库_使用Python的toolz库开始函数式编程的方法
  11. 一起来学习LiteOS中断模块的源代码
  12. 局域网内时间同步配置
  13. elasticsearch2.2之index映射参数的not_analyzed属性
  14. 主动降噪python_尝试使用Pyadi主动降噪时遇到错误
  15. 前端单行省略号和多行省略号
  16. android studio moudel,Android Studio中的Module是指什么?
  17. Excel怎么调出开发工具选项
  18. 《Linux C编程从入门到精通》一第1章 Linux基础1.1 Linux的起源、发展和分类
  19. vue+echarts实现3d地图——引入3d地图,加点,加点击事件
  20. linux php com,Linux_COM简介,世上无难事,只要肯登攀, - phpStudy

热门文章

  1. OneNET麒麟座应用开发之八:采集大气压力等环境参数
  2. 记一次src挖洞实战——逻辑漏洞
  3. STP的BPDU报文类型
  4. php 如何使用ck播放视频,[原创]简单代码利用ckplayer播放器实现帝国CMS播放优酷在线视频...
  5. 这27个电源符号,还傻傻分不清楚?
  6. Layabox联手金山云,推出8折优惠大礼包!
  7. ssh_exchange_identification read Connection reset by peer
  8. echarts中y轴设置刻度_xAxis 配置
  9. 优信php面试流程_php面试的的时候你被提过哪些问题?
  10. C++知识点(持续更新)