算法与数据结构
算法与数据结构
Xzzz2020
个人博客地址:https://xzzz2020.gitee.io/,可以收藏一下,会第一时间发布文章
展开
-
快速幂之Java实现
博主针对2021校招字节跳动的第五轮笔试第二,学习了快速幂算法文章目录一、简介二、性能优化三、对性能进行压榨一、简介求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方”当一个数的幂很大时,如果直接使用Math.pow()运算,会导致溢出,所以最简单的方法就是,累乘B次,每次对结果进行求模运算,我们以2的1000000000次方为例,Java代码如下:public class Test { private static int mod = 1000; pub.原创 2020-09-21 10:39:26 · 1241 阅读 · 1 评论 -
贪心策略
目录简介贪心的特点实际例子硬币支付问题简介无论是dfs还是bfs都是遍历解空间动态规划和贪心算法都是一种递推算法,运用局部最优解来推到全局最优解是对遍历解空间的一种优化当问题具有最优子结构的时候,可以用动归,而贪心是动归的特例。贪心的特点只看眼前。根据某种规则,不断的选取当前策略,最终找到最优解注意:当前最优的未必是整体最优实际例子硬币支付问题硬币问题有1元,5元,10元,50元,100元,500元的硬币各c1,c5,c10,c50,c100,c500枚.现在要用这些硬币原创 2020-06-25 21:58:06 · 339 阅读 · 0 评论 -
Java--LeetCode56--数组中数字出现的次数(异或和与运算)
题目描述一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析首先不能用map或者一个数组记录各个数字出现的次数的次数(空间复杂度大于O(1))不能使用双重循环遍历(时间复杂度为O(n2))由于数组中存在着两个数字不重复的情况,我们将所有的数字异或操作起来,最终得到的结果是这两个数字的...原创 2020-04-28 17:25:52 · 259 阅读 · 0 评论 -
Java---LeetCode.23---合并K个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。整体时间复杂度为O(N*log(k)), k为链表个数,N为链表数组中节点总个数。整体思路为:合并数组中第k个链表到第1个链表,合并数组中第k-1个链表到第2个链表,依次这样操作…一轮合并之后,新链表分布在数组的 第1 到 第(k+1)/2个链表中,继续1这样的合并直到新链表只在数组第一个位置。返回数...原创 2020-04-26 08:58:33 · 190 阅读 · 0 评论 -
《算法之美》---DFS--素数环&困难串
素数环import java.util.Scanner;/** * 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数, * 输出时从整数1开始,逆时针排列。同一个环应恰好输出一次。 * n<=16 * * 如输入:6 * 输出: * 1 4 3 2 5 6 * 1 6 5 2 3 4 */public class Dfs_5素数环 { public ...原创 2020-04-09 12:19:17 · 164 阅读 · 0 评论 -
Java--leetcode--机器人的运动范围--递推&dfs
地上有一个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。请问该机器人能够到达多少...原创 2020-04-08 10:05:46 · 123 阅读 · 0 评论 -
《算法之美》---DFS--n皇后
/** * 请设计一种算法,解决著名的n皇后问题。这里的n皇后问题指在一个n*n的棋盘上放置n个棋子, * 使得每行每列和每条对角线上都只有一个棋子,求其摆放的方法数。 给定一个int n,请返回方法数,保证n小于等于15 */public class Dfs_4n皇后问题 { static int n; static int cnt; static int[] rec...原创 2020-04-06 10:17:11 · 145 阅读 · 0 评论 -
《算法之美》-- DFS--部分和&水洼数目
DFS考虑的穷尽所有考虑状态的变化如果在同一层,是否有些参数存在变化,需要进行回溯部分和/*给定整数序列a1,a2,...,an,判断是否可以从中选出若干数,使它们的和恰好为k. 1≤n≤20 -10^8≤ai≤10^8 -10^8≤k≤10^8样例:输入 n=4 a={1,2,4,7} k=13输出: Ye...原创 2020-04-04 11:00:37 · 189 阅读 · 0 评论 -
《算法之美》-- DFS--数独游戏
伪代码package org.lanqiao.algo.elementary._07_dfs;import java.util.Scanner;/*你一定听说过“数独”游戏。如下图所示,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。本图的数字据说是芬兰...原创 2020-04-03 14:56:45 · 179 阅读 · 0 评论 -
Java--leetcode--全排列2
给定一个可包含重复数字的序列,返回所有不重复的全排列。class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> newSet = new ArrayList<>(); ...原创 2020-04-02 11:22:25 · 164 阅读 · 0 评论 -
Java--Leetcode--地图分析(BFS)
你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0 - ...原创 2020-03-29 10:06:52 · 213 阅读 · 0 评论 -
《算法之美》-- 递归--非数值型
"逐步生成结果”类问题之非数值型CC150—9_6合法括号/** * 1.输出合法的括号组合 * 输入括号对数 * 输出所有合法组合 * 输入:3 * 输出:()()(),((())),(()()),()(()),(())(), * 2.判断一个字符串是否合法 *///(())(())public class _9_6合法括号 { public static void...原创 2020-03-28 10:03:20 · 284 阅读 · 0 评论 -
Java--LeetCode--820. 单词的压缩编码
给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进行编码的...原创 2020-03-28 09:14:58 · 403 阅读 · 0 评论 -
《算法之美》-- 递归--数值型
目录"逐步生成结果”类问题之数值型自下而上的递归(递推数学归纳,动态规划)"逐步生成结果”类问题之数值型自下而上的递归(递推数学归纳,动态规划)递归又叫递推,不仅仅是只是自上而下的,这样写只是利用了编程语言的便捷性自上向下只是代码的现象,只是写成了这种形式,而本质是由小规模问题形成大规模问题,是自下而上的在数学上是数学归纳法为什么是数学归纳法?解决简单情况下的问题,如斐波那契数...原创 2020-03-22 12:05:03 · 329 阅读 · 0 评论 -
Java --LeetCode--水壶问题
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous “Die Hard” example)输入: x = 3, y = 5, ...原创 2020-03-21 09:24:17 · 338 阅读 · 0 评论 -
Java-LeetCode-矩形面积
题目:在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。每个矩形由其左下顶点和右上顶点坐标表示,如图所示。示例:输入: -3, 0, 3, 4, 0, -1, 9, 2输出: 45说明: 假设矩形面积不会超出 int 的范围。题解:class Solution { public int computeArea(int A, int B, int C, int D,...原创 2020-03-18 15:39:39 · 229 阅读 · 0 评论 -
Java-LeetCode--拼写单词
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。示例 1:输入:words = [“cat”,“bt”,“hat...原创 2020-03-17 18:45:26 · 273 阅读 · 0 评论 -
Java-LeetCode-岛屿的最大面积(dfs)
题目给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,...原创 2020-03-15 15:05:53 · 420 阅读 · 0 评论