- 博客(250)
- 收藏
- 关注
原创 859.亲密字符串。简单易懂0ms
class Solution { public boolean buddyStrings(String s, String goal) { int len1 = s.length(), len2 = goal.length(); if(len1 != len2) return false; Set<Character> set = new HashSet<>(); for(int i = 0; i < l
2022-02-01 13:30:33
551
原创 771.宝石与石头
class Solution { public int numJewelsInStones(String jewels, String stones) { int len1 = jewels.length(), len2 = stones.length(); int[] arr = new int[256]; int res = 0; for(int i = 0; i < len1; i++){ arr[j
2022-02-01 01:43:31
514
原创 645.错误的集合。哈希表0ms
// 哈希中出现2次的是重复元素,未出现的则是缺失元素,返回这两个即可class Solution { public int[] findErrorNums(int[] nums) { // 哈希中出现2次的是重复元素,未出现的则是缺失元素,返回这两个即可 int len = nums.length; int[] count = new int[len + 1]; for(int num : nums) count[num]++;
2022-02-01 00:52:36
535
原创 594.最长和谐子序列。滑动窗口0ms
class Solution { // 滑动窗口 public int findLHS(int[] nums) { Arrays.sort(nums); int left = 0, res = 0; for(int right = 0; right < nums.length; right++){ while(nums[right] - nums[left] > 1){ ++l
2022-02-01 00:42:13
271
原创 389.找不同
字符串s和t中的ascⅡ求和,二者之差就是被添加的字符class Solution { // 字符串s和t中的ascⅡ求和,二者之差就是被添加的字符 public char findTheDifference(String s, String t) { int sum_s = 0, sum_t = 0; for (int i = 0; i < s.length(); ++i) { sum_s += s.charAt(i);
2022-01-30 00:38:15
420
原创 13.罗马数字转整数
class Solution { public int romanToInt(String s) { HashMap<String, Integer> map = new HashMap<>(); map.put("I", 1); map.put("IV", 4); map.put("V", 5); map.put("IX", 9); map.put("X", 10);
2022-01-30 00:07:15
275
原创 205.同构字符串,哈希0ms。简单易懂
题目的意思:s的任意一个字符被t中唯一的字符对应,同时t的任意一个字符被s中唯一的字符对应class Solution { public boolean isIsomorphic(String s, String t) { // m1:s到t的映射,m2:t到s的映射 int[] m1 = new int[256]; int[] m2 = new int[256]; for (int i = 0; i < s.length();
2022-01-30 00:07:08
462
原创 268.丢失的数字,简单的哈希
class Solution { // 简单的哈希 public int missingNumber(int[] nums) { HashSet<Integer> set = new HashSet<>(); for(int num : nums) set.add(num); for(int i = 0; i <= nums.length; i++){ if(!set.contains(i)
2022-01-30 00:06:57
370
原创 12.整数转罗马数字,贪心。简单易懂0ms
贪心:每次尽量使用最大的数来表示。 比如对于 1994 这个数,如果我们每次尽量用最大的数来表示,依次选1000,900,90,4,会得到正确结果MCMXCIVclass Solution { // 贪心:每次尽量使用最大的数来表示。 比如对于 1994 这个数, // 如果我们每次尽量用最大的数来表示,依次选1000,900,90,4,会得到正确结果MCMXCIV public String intToRoman(int num) { int[] nums = {
2022-01-29 22:43:16
77
原创 面试题17.10.主要元素。摩尔投票法
与T169得摩尔投票法不同,本题最后需要对结果进行一个判断:统计出现次数,是否存在主要元素才行。class Solution { // 与T169的略有不同,本题不保证有众数,所以最后需要判断是否存在主要元素 public int majorityElement(int[] nums) { int nums_count = nums[0], count = 1; for(int i = 1; i < nums.length; i++){
2022-01-29 14:54:25
682
原创 1790.仅执行一次字符串交换能否使两个字符串相等
class Solution { public boolean areAlmostEqual(String s1, String s2) { if (s1.length() != s2.length()) return false; int count = 0, m = -1, n = -1; for (int i = 0, j = 0; i < s1.length(); i++, j++) { if (s1.charAt
2022-01-29 13:27:31
216
原创 1512.判断字符串的两半是否相似
class Solution { public boolean halvesAreAlike(String s) { Set<Character> set = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')); int len = s.length()/2; int count1 = 0, count2 = 0;
2022-01-29 13:09:28
5287
原创 1394.找出数组中的幸运数,计数排序简单易懂0ms
class Solution { public int findLucky(int[] arr) { int[] result = new int[501]; for(int i = 0; i < arr.length; i++){ result[arr[i]]++; } for(int i = 500; i > 0; i--){ if(result[i] == i) retu
2022-01-29 12:50:23
175
原创 1221.分割平衡字符串,简单易懂最优解
加一个减一个,经典题型class Solution { public int balancedStringSplit(String s) { int res = 0, count = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i)=='R') ++count; if (s.charAt(i) == 'L') --count;
2022-01-29 11:43:57
177
原创 1189.“气球”的最大数量,简单易懂0ms
class Solution { public int maxNumberOfBalloons(String text) { int[] ans = new int[26]; char[] arr = text.toCharArray(); //记录每个字母出现的次数 for(int i = 0; i < arr.length; i++){ ans[arr[i] - 'a']++; }
2022-01-29 11:28:13
218
原创 713.乘积小于K的子数组,滑动窗口0ms
class Solution { public int numSubarrayProductLessThanK(int[] nums, int k) { if(k == 0 || k == 1) return 0; int left = 0; int sum = 1, result = 0; for(int right = 0; right < nums.length; right++){ sum = su
2022-01-29 00:54:40
84
原创 978.最长涡流子数组
T376变形,本题要求连续class Solution { public int maxTurbulenceSize(int[] arr) { int len = arr.length; int up = 1, down = 1, result = 1; for(int i = 1; i < len; i++){ if(arr[i] > arr[i - 1]){ up = down
2022-01-29 00:01:18
404
原创 1052.爱生气的书店老板,滑动窗口,简单易懂0ms
题目有点复杂,简单来说就是求数组指定长度最大和的问题-滑动窗口class Solution { public int maxSatisfied(int[] customers, int[] grumpy, int minutes) { int sum = 0, len = customers.length; for (int i = 0; i < len; i++) { // 不生气的部分进行相加,同时把此顾客置0
2022-01-29 00:00:59
260
原创 643.子数最大平均数Ⅰ。滑动窗口
class Solution { public double findMaxAverage(int[] nums, int k) { int sum = 0, len = nums.length; for(int i = 0; i < k; i++) sum += nums[i]; int max = sum; for(int i = k; i < len; i++){ sum -= nums[i -
2022-01-28 23:03:52
60
原创 219.存在重复元素Ⅱ
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { HashSet<Integer> set = new HashSet<>(); for(int i = 0; i < nums.length; i++) { if(set.contains(nums[i])) { return tr
2022-01-28 22:50:42
5666
原创 面试题10.01.合并排序数组0ms
class Solution { // 从后往前 public void merge(int[] A, int m, int[] B, int n) { int k = m + n - 1, i = m - 1, j = n - 1; while(i >= 0 && j >= 0){ if(A[i] < B[j]) A[k--] = B[j--]; else A[k--] = A
2022-01-28 15:17:33
698
原创 2000.反转单词前缀0ms
class Solution { public String reversePrefix(String word, char ch) { int k = word.indexOf(String.valueOf(ch)); if(k == 0 || k == -1) return word; char[] result = word.toCharArray(); for(int i = 0; i <= k/2; i++){
2022-01-28 13:46:44
137
原创 1768.交替合并字符串
class Solution { public String mergeAlternately(String word1, String word2) { int len1 = word1.length(), len2 = word2.length(); int index = 0; char[] result = new char[len1 + len2]; for(int i = 0; i < len1 || i < l
2022-01-28 13:29:27
145
原创 1089.复写零
class Solution { public void duplicateZeros(int[] arr) { for(int i = 0; i < arr.length; i++){ if(arr[i] == 0){ for(int j = arr.length - 1; j > i; j--){ arr[j] = arr[j - 1]; }
2022-01-28 11:31:24
54
原创 922.按奇偶排序数组Ⅱ
class Solution { public int[] sortArrayByParityII(int[] nums) { int j = 1;// 下标 for(int i = 0; i < nums.length - 1; i += 2){ if((nums[i] % 2) != 0){ while((nums[j] % 2) != 0) j += 2; int te
2022-01-28 11:12:59
151
原创 917.仅仅反转字母
class Solution { public String reverseOnlyLetters(String s) { int left = 0, right = s.length() - 1; char[] result = s.toCharArray(); while(left < right){ while(left < right && !Character.isLetter(result
2022-01-28 11:04:19
66
原创 955.按奇偶排序数组
class Solution { public int[] sortArrayByParity(int[] nums) { int left = 0, right = nums.length - 1; while(left <= right){ if(nums[left] % 2 == 0) ++left; else{ int temp = nums[left];
2022-01-28 10:51:47
58
原创 881.救生艇
排序,然后看最重的能否跟最轻的一起走,如果可以,一起走,如果不行,单独走。class Solution { public int numRescueBoats(int[] people, int limit) { int result = 0, left = 0, right = people.length - 1; Arrays.sort(people); while(left <= right){ if(left =
2022-01-28 10:43:39
168
原创 845.数组中的最长山脉,中心扩展
先找到比左右两侧大的数 然后以这个数为中心 依次找到左右的长度class Solution { public int longestMountain(int[] arr) { if(arr == null || arr.length <= 2) return 0; int max = 0; for(int i = 1; i < arr.length - 1; i++){ if(arr[i] > arr[i
2022-01-27 22:01:31
49
原创 696.计数二进制字串,中心扩展法
class Solution { public int countBinarySubstrings(String s) { int result = 0; char[] chars = s.toCharArray(); for(int i = 1; i < s.length(); i++){ int left = i - 1, right = i; char leftChar = chars[le
2022-01-27 21:16:57
65
原创 680.验证回文串,不一样的思路
class Solution { public boolean validPalindrome(String s) { int i = 0, j = s.length() - 1; while(i < j){ if(s.charAt(i) != s.charAt(j)){ // 有一次可以删除的机会 return isVaild(s, i + 1, j) || isVaild
2022-01-27 20:53:21
49
原创 443.压缩字符串,双指针简单易懂注释版0ms
难点主要是字符串中超过10次的元素class Solution { public int compress(char[] chars) { int slow = 0, fast = 0; while(fast < chars.length){ int count = 1; while(fast + 1 < chars.length && chars[fast] == chars[fast +
2022-01-27 20:16:27
559
原创 165.比较版本号
class Solution { public int compareVersion(String version1, String version2) { int i = 0, j = 0; int len1 = version1.length(), len2 = version2.length(); while(i < len1 || j < len2){ int a = 0, b = 0;
2022-01-27 19:36:31
139
原创 面试题 16.06最小差
逐渐逼近class Solution { public int smallestDifference(int[] a, int[] b) { int len1 = a.length, len2 = b.length; Arrays.sort(a);Arrays.sort(b); long result = Integer.MAX_VALUE; int i = 0, j = 0; while(i < len1 &a
2022-01-27 13:46:02
65
原创 面试题 08.03.魔术索引。跳跃查找
跳跃查找法因为是有序数组,若 nums[i]!=i , 下标[i,nums[i])区间内将不会产生结果在此区间内遍历属于无用功,则i可以直接跳到nums[i]位置继续向后遍历class Solution { public int findMagicIndex(int[] nums) { for(int i = 0;i < nums.length; ){ if(nums[i] == i){ return i;
2022-01-27 11:21:09
80
原创 1539.第K个缺失的正整数。一行代码解决0ms
前面每有一个整数出现就把空位补上,空缺的数往后移一个class Solution { public int findKthPositive(int[] arr, int k) { for(int i = 0; i < arr.length; i++){ if(arr[i] <= k) ++k; } return k; }}...
2022-01-27 10:53:42
162
原创 1385.两个数组间的距离值
class Solution { public int findTheDistanceValue(int[] arr1, int[] arr2, int d) { int result = arr1.length; for(int i : arr1){ for(int j : arr2){ if(Math.abs(i - j) <= d){ --result;
2022-01-27 10:51:28
83
原创 1894.找到需要补充粉笔的学生编号
class Solution { public int chalkReplacer(int[] chalk, int k) { int len = chalk.length; long sum = 0; for(int ch : chalk) sum += ch; k %= sum;// 多余的部分直接循环去掉 for(int i = 0; i < len; i++){ if(chalk
2022-01-27 10:51:15
862
原创 1351.统计有序矩阵中的负数,代码超级简单,一看就懂0ms
class Solution { public int countNegatives(int[][] grid) { if(grid.length == 0 || grid[0].length == 0) return 0; int count = 0; // 从右上角开始遍历,如果当前值≥0,由于是非递增,那么前面的都是非负 // 如果当前的<0,那么剩下的就都是负数了,直接开始下一列 for(int i = 0
2022-01-26 21:05:32
91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人