自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++基础 ----- 文件操作

文章目录写在前面文本文件的读写操作流程一、写文件二、读文件三、关于文件的打开方式二进制文件的读写操作一、写文件二、读文件写在前面C++中对文件操作需要包含头文件<fstream>文件类型分为两种文本文件:文件以文本对ASCII码形式存储在计算机中二进制文件:文件以文本的二进制形式存储在计算机中操作文件的三大操作ofstream:写操作ifstream:读操作fstream:读写操作文本文件的读写操作流程一、写文件(1) 流程包含头文件:&l

2020-08-31 17:47:52 136

原创 背包九讲 ----- 01背包问题模版

01背包问题题意输入:两个整数NNN、VVV,用空格隔开,分别表示待选的物品数量和背包的容积接下来有N行,每行有两个整数viv_ivi​、wiw_iwi​,用空格隔开,分别表示第iii个物品的体积和价值输出:背包能存放的最大价值题解(二维dp)用 f[i][j]f[i][j]f[i][j] 表示只看前 iii 个物品,背包容积为 jjj 时,背包能存放的最大价值那么 ans=ans=ans=maxmaxmax { f[N][0f[N][0f[N][0 ~ V]V]V]

2020-08-22 20:57:51 144

原创 牛客网 - 机器人走方格 (动态规划)

机器人走方格解法1(排列组合)公式:Cx+y−2x−1C_{x+y-2}^{x-1}Cx+y−2x−1​或Cx+y−2y−1C_{x+y-2}^{y-1}Cx+y−2y−1​注意点:x和y是方格的格点数机器人走的是格点public class Robot { public int countWays(int x, int y) { // write code here int n = x + y - 2; int t = x >

2020-08-22 13:24:29 346

原创 LeetCode 面试题 08.01. 三步问题 (动态规划)

面试题 08.01. 三步问题class Solution { public int waysToStep(int n) { if(n == 1) return 1; if(n == 2) return 2; if(n == 3) return 4; long[] dp = new long[n + 1]; dp[1] = 1; dp[2] = 2; dp[3] = 4

2020-08-22 12:52:58 242

原创 LeetCode 70. 爬楼梯 (递归&斐波那契 | 动态规划)

70. 爬楼梯解法1 (递归)推出递推式子:f(n) = f(n - 1) + f(n - 2)是一个斐波那契数列,用递归class Solution { public int climbStairs(int n) { if (n == 1) return 1; if (n == 2) return 2; return climbStairs(n - 1) + climbStairs(n - 2); }}解法2 (递归改循环)

2020-08-21 19:31:40 166

原创 PREV-52 小数第n位 (大数)

题目:AC代码import java.math.BigDecimal;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String a = scanner.next(); String b = scanner.next();

2020-08-21 16:58:49 122

原创 PREV-55 小计算器 (进制转换)

题目:几个需要注意的点:CLEAR指令:重制计算,相当于计算机中的C按钮CHANGE K指令:改变的是整个运算的进制,不是单独改变某个数的进制,如输入1024后,改变为二进制再加上100000(二进制数),最后输出的进制也是当前二进制数如何解决不同进制之间的运算:把所有输入的数先转为十进制进行运算,然后最后输出的时候再按照之前的进制进行输出Integer.parseInt(数, 数对应的进制)/Integer.valueOf(数, 数对应的进制) ----- 将不同进制数转为十进制数Int

2020-08-21 16:06:20 228

原创 LeetCode 567. 字符串的排列 (滑动窗口&哈希表)

567. 字符串的排列题意:第一个字符串的排列之一是第二个字符串的子串即判断第二个字符串是否包含某个子串,这个子串的字符以及字符数量要求与第一个字符串相同解法1 (暴力法)按照第一个字符串的长度找出第二个字符串的所有相应长度的子串比较每个子串与第一个字符串的字符以及字符数量是否相同 (哈希表)class Solution { public static boolean checkInclusion(String s1, String s2) { Map<C

2020-08-20 17:00:54 228

原创 LeetCode 209. 长度最小的子数组 (滑动窗口)

LeetCode 209. 长度最小的子数组class Solution { public int minSubArrayLen(int s, int[] nums) { int start = 0; int sum = 0; int minLen = nums.length + 1; int mark = 0; for (int end = 0; end < nums.length; end++) {

2020-08-19 21:06:03 102

原创 LeetCode 340. 至多包含 K 个不同字符的最长子串

340. 至多包含 K 个不同字符的最长子串class Solution { public int lengthOfLongestSubstringKDistinct(String s, int k) { HashMap<Character, Integer> map = new HashMap<>(); int start = 0; int maxLen = 0; for (int end = 0; end

2020-08-19 20:10:03 159

原创 LeetCode 159. 至多包含两个不同字符的最长子串 (滑动窗口&哈希表)

159. 至多包含两个不同字符的最长子串class Solution { public static int lengthOfLongestSubstringTwoDistinct(String s) { HashMap<Character, Integer> map = new HashMap<>(); int start = 0; int maxLen = 0; for (int end = 0; end

2020-08-19 20:01:58 322

原创 LeetCode 76. 最小覆盖子串 (滑动窗口&哈希表)

76. 最小覆盖子串题意:给定s串和t串返回s串的一个子串子串要求:包含t串所有字符(包括个数)且最短思路:建立一个滑动窗口[start,end]end用来扩展窗口,当窗口内包含了t串所有字符时,start向右收缩窗口,直到窗口内不包含t串所有字符此时的[start - 1,end]即为待定的ansclass Solution { public static String minWindow(String s, String t) { // 统计t字符串中字

2020-08-19 19:16:35 108

原创 LeetCode 3. 无重复字符的最长子串 (滑动窗口&哈希表)

3. 无重复字符的最长子串题意:找子串子串中无重复字符要求子串长度最长解法1(暴力法)思路:建立一个长度不断变小的滑动窗口用一个指针指针扫描窗口内的每个元素:如果除去指针指向的那个元素,窗口内仍有与其相同的字符则停止扫描只要上面的窗口扫描指针大于了窗口的endIndex,则说明该窗口内无相同字符返回该窗口长度即为ansclass Solution { public static int lengthOfLongestSubstring(String s) {

2020-08-16 16:30:23 188

原创 LeetCode 169. 多数元素 (哈希映射|投票算法)

169. 多数元素题意:多数:数组中出现次数大于n2\frac{n}{2}2n​ 的数输入一个含有多数元素的数组找出该多数解法1 (暴力法)思路:找出数组中每一个元素出现的次数次数保存在一个相同长度的数组中遍历该数组找出最大值的下标即为多数的下标class Solution { public int majorityElement(int[] nums) { int[] helper = new int[nums.length]; int

2020-08-15 12:38:21 193

原创 数据结构 (二) ----- 单向链表&双向链表

单链表一、基本概念单链表由一个个节点组成每一个节点保存了存储的数据信息还保存了下一个节点的内存地址public class MySingleListNode { Object data; MySingleListNode next; public MySingleListNode(Object data) { this.data = data; }}二、接口public interface MyList { // 新增一个

2020-08-14 12:51:32 105

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面题意:调整数组顺序使奇数位于偶数前面答案不唯一解法1 (快排中的partition思想)建立指针:p1指向nums头部,p2指向nums尾部p1找到偶数停下,p2找到奇数停下交换数组p1,p2位置处的元素交换后p1++,p2–class Solution { public int[] exchange(int[] nums) { int p1 = 0, p2 = nums.length - 1;

2020-08-11 17:01:18 100

原创 字符串匹配问题 ----- KMP算法

题意:任意给定一段字符串str(“123abc123abc00abc”)再输入一个关键字key(“abc”)要求返回str中包含key的所有子串的头下标解法1:暴力法(双指针,不使用String类的substring)思路:建立一个滑动窗口建立两个指针p1,p2:p1指针扫描滑动窗口中的每个字符,p2指针扫描key串中的每个字符 public static ArrayList<Integer> match(String str, String key) {

2020-08-10 20:37:01 136 1

原创 数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表

数据结构基本概念一、逻辑结构集合:元素罗列在一起线性结构:元素前后相继一一对应树形结构:元素存在一对多的关系图结构或网状结构:元素之间存在多对多的关系二、存储结构顺序存储:地址连续,用数组链式存储:地址不连续,用指针三、数据结构定义数据结构:为了某种特殊的需求而专门设计的存储方式四、数据结构的通用的几个操作插入 (add, insert)删除 (delete)修改 (update)查找 (get, indexOf)遍历排序 (sort)线性表一、基本

2020-08-10 17:23:51 117

原创 POJ - 1704 Georgia and Bob

Georgia and Bob题意:一个水平网格上有N个棋子Georgia和Bob每到自己回合时可以向左移动网格上任意一个棋子任意步数棋子与棋子之间不能重叠和相互跨越假设Georgia和Bob都采用最优策略,谁会赢得比赛?输入要求:第一行依次输入网格上所有棋子所在的位置,如:1 3 6 7第二行输入先手者的名字,如:Georgia输出要求:如果Georgia赢的比赛,输出:“Georgia will win”如果Bob赢的比赛,输出:“Bob will win”思路:

2020-08-09 20:43:14 180

原创 博弈论 ----- Nim游戏

题目:结论:假设有三堆石子{3, 4, 5}, 每堆石子分别有3、4、5个石子把3、4、5分别转为二进制:011、100、101对011、100、101取异或(对位相同取0,相异取1),011^100^101 = 010若异或结果为0,那么只要改变任意一堆石子的任意数量则异或结果必定会变为非0最优策略:只要每堆石子数量的二进制数求异或结果不为0,则到自己回合的时候改变其中一堆石子数量让异或结果为0因为只要在我回合结束后把异或结果变为0,那么对手回合则无论他怎么操作,异或结果必定不

2020-08-09 20:01:51 253

原创 马虎的算式子 (枚举法)

题意:ab*cde = adb*ce (abcde五个不同的数字,不包含0) 满足该式子的一共多少种解法1(枚举法)思路:本题目中的恒等条件是:ab*cde = adb*ce其中不定量的取值条件是:大于1小于9且互不相同使用5层循环:遍历1到9,每一层循环的下一层循环取值要求与上面所有循环取值不同最后一层循环根据问题建立筛选条件:(a*10 + b)*(c*100 + d*10 + e) == (a*100 + d*10 + b) *(c*10 + e)public static voi

2020-08-08 22:01:30 300

原创 天枰称重 (枚举法|进制转换&逢十进一模版)

题意:方法1(枚举法)思路:先找到所有小于1000000的3的幂的数:[1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441]根据题意可知每一个数的前面的系数只有三种可能性[-1, 0, 1]那么有inputNum = (系数)*1 + (系数)*3 + (系数)*9 + (系数)*27 + (系数)*81 + (系数)*243 + (系数)*729 + (系数)*2187 + (系数)*6561 + (系数)*

2020-08-08 20:14:10 451

原创 LeetCode 14. 最长公共前缀 (单指针水平扫描)

14. 最长公共前缀题意:找出一个字符串数组中所有字符串的最长公共前缀,如果不存在返回""思路:假设数组第一个元素就是ans从下标1开始遍历数组用一个指针水平扫描ans的字符和数组中的字符串的字符class Solution { public String longestCommonPrefix(String[] strs) { if (strs.length == 0) return ""; // 假设最长公共前缀为字符串数组中第一个字符串

2020-08-07 22:38:22 105

原创 字符串匹配问题 ----- Rabin-Karp算法

题意:任意给定一段字符串str(“123abc123abc00abc”)再输入一个关键字key(“abc”)要求返回str中包含key的所有子串的头下标解法1(暴力法)思路:以key串长度进行窗口滑动str中[startIndex, endIndex]的子串与key相同则匹配 public static ArrayList<Integer> match(String str, String key) { ArrayList<Integer&gt

2020-08-06 17:17:00 195

原创 LeetCode 415. 字符串相加 (逢十进一模版&字符处理)

415. 字符串相加题意:用两个字符串表示两个数求出其相加的结果不能使用任何内建 BigInteger 库不能直接将输入的字符串转换为整数形式思路:将字符串转为char数组建立两个指针p1,p2指向数组尾部,依次向前扫描计算p1、p2指向的char数据关于`0`字符偏移量(将char字符内容转为int),如:字符`8`偏移量为8p1、p2指向偏移量对应相加将相加的结果%10求余数,append到StringBuilder中如果相加结果大于10则进位class Solutio

2020-08-06 12:56:32 309

原创 java中基本数据类型

计算机只能识别二进制(10011001…)1bit就是一个0或者11byte = 1字节=8bit基本数据类型占用空间二进制位数取值范围默认值byte1字节8bit[−27,27−1][-2^7, 2^7-1][−27,27−1]、[−128,127][-128, 127][−128,127]0short2字节16bit[−215,215−1][-2^{15}, 2^{15}-1][−215,215−1]、[−32768,32767][-32768,327

2020-08-05 14:08:05 117

原创 LeetCode 239. 滑动窗口最大值

239. 滑动窗口最大值题意:解法1(暴力法)思路:建立一个ans数组:长度为窗口在数组中所出现的不同位置的次数即nums.length - k + 1定一个左顶点(startIndex)不断往右移根据k确定右顶点(endIndex):nums.length + k - 1只要右顶点下标超过nums边界则右顶点停止移动上面三个步骤实现了一个长度k的窗口从左往右在nums中移动每次移动的时候找到nums数组在(startIndex, endIndex)范围的最大值存放到ans中即可c

2020-08-03 19:43:40 104

原创 LeetCode 647. 回文子串 (动态规划)

647. 回文子串题意:任意给定一个字符串,计算这个字符串的回文子串个数解法1(暴力法)思路:默认回文子串初始个数为字符串长度从子串长度为2—母串长度:找出所有的子串startIndex和endIndex判断子串是否是回文串,是的话count++class Solution { public int countSubstrings(String s) { // 子串长度 int length = 2; // 计数回文子串,默认

2020-08-03 16:31:26 128

原创 Java中ArrayList、Integer[]和int[]的相互转换

方法一:利用Arrays工具类中的asList方法Integer[] arr = {1,2,3};ArrayList<Integer> list = new ArrayList<>(Arrays.asList(arr));方法二:利用Collections工具类中的addAll方法Integer[] arr = {1,2,3};ArrayList<Integer> list = new ArrayList<>(array.length);Co

2020-08-02 19:48:16 2291 1

原创 LeetCode 面试题 01.06. 字符串压缩 (双指针)

面试题 01.06. 字符串压缩题意: 压缩字符串,如:“aabbccc"压缩为"a2b2c3”,如果压缩后的字符串长度大于等于原字符串,则返回原来的字符串。解法(双指针法)思路:建立p1,p2双指针:p1指向同字符子串的头部,p2用来扫描原字符串,找子串尾部p1与p2之间的子串即为同字符子串,p2-p1为子串长度把p1指向的字符和子串长度追加到StringBuffer中最后判断以下StringBuffer和原字符串长度class Solution { public String

2020-08-02 16:13:52 274

原创 剑指 Offer 58 - I. 翻转单词顺序 (双指针)

剑指 Offer 58 - I. 翻转单词顺序题意:翻转一个英文句子中单词顺序解法1思路: split分割 + 倒序 public static String reverseWords(String s) { String[] wordsAndSpacing = s.split(" "); StringBuffer buffer = new StringBuffer(); int count = 0; // 1. 计数words

2020-08-02 15:14:08 98

原创 LeetCode 242. 有效的字母异位词 (计数排序思想&字符处理)

242. 有效的字母异位词题意:任意给定两个单词字符串,判断这两个字符串是否是字母异位词思路:先判断字符串长度是否相等将s字符串每个字母映射到数组中,在对应位置++将t字符串每个字母映射到数组中,在对应位置--遍历数组,如果数组中每个元素都为0则s和t字符串包含相同个数的相同字母即互为字母异位词,反之则不是class Solution { public static boolean isAnagram(String s, String t) { if(s.leng

2020-08-02 10:27:54 137

原创 java中几种翻转字符串的办法

public static String reverse1(String s) { char[] reverseStr = new char[s.length()]; for(int i = 0; i < s.length(); i++) { reverseStr[reverseStr.length-1-i] = s.charAt(i); } return new String(reverseStr); ...

2020-08-01 15:56:12 230

原创 面试题 01.01. 判定字符是否唯一 (计数排序思想)

面试题 01.01. 判定字符是否唯一题意:输入一个字符串(ASCII),判断该字符串中是否有重复的字符解法1:遍历字符串,将每一个字符转为ASCII码映射到一个数组对应的下标,记录字符出现的次数class Solution { public static boolean isUnique(String astr) { int[] flag = new int[128]; for (int i = 0; i < astr.length(); i++) {

2020-08-01 15:07:26 130

原创 Unicode和ASCII的区别

ASCII:编码英文的26个字母和一些常见的符号,一共128个字符,之后扩展到了256个字符。Unicode:为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集,共有6万多个字符,其中汉字占了4万多。...

2020-08-01 14:25:05 221

原创 LeetCode1139. 最大的以 1 为边界的正方形 (二维滑动窗口&待优化)

1139. 最大的以 1 为边界的正方形题意:任意给一个只有0,1组成的矩阵,在里面找最大的由1围成的正方形{0,1,1,1,1}{0,1,0,1,1}{0,1,1,1,0}{0,1,0,1,1}{0,1,0,1,1}思路:用一个正方形窗口来扫描矩阵内的元素用窗口左上角来确定其位置最内层循环让窗口从左往由扫描矩阵最外层循环让窗口从上往下扫描矩阵收获:动态边在一定范围内移动的条件:startIndex(边的左顶点下标) + length(边长) - 1 <= bound

2020-08-01 12:03:59 185

原生 JavaScript 实现像素贪吃蛇

适合 HTML CSS JavaScript 的入门练习

2020-12-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除