
剑指Offer
是聪聪黄吖
道阻且长,行则将至!
展开
-
剑指 Offer 58 - II. 左旋转字符串(字符串库函数)
方法一:字符串库函数 class Solution { public String reverseLeftWords(String s, int n) { StringBuilder str = new StringBuilder(); str.append(s.substring(n)).append(s.substring(0, n)); return str.toString(); } }原创 2021-08-30 15:45:23 · 79 阅读 · 0 评论 -
剑指 Offer 58 - I.翻转单词顺序(库函数)
方法一:库函数 class Solution { public String reverseWords(String s) { StringBuilder str = new StringBuilder(); String[] res = s.trim().split(" "); for (int i = res.length - 1; i >= 0; i--) { if(res[i].equals(""))原创 2021-08-30 08:32:03 · 79 阅读 · 0 评论 -
剑指 Offer 57 - II.和为s的连续正数序列(普通遍历+滑动窗口)
方法一:普通遍历 class Solution { public int[][] findContinuousSequence(int target) { List<int[]> res = new ArrayList<>(); for (int i = 1; i <= (target / 2) + 1; i++) { int sum = 0; for (int j = i; j <=原创 2021-08-11 18:03:38 · 93 阅读 · 0 评论 -
剑指 Offer 57 - I.和为s的两个数字(双指针)
双指针 class Solution { public int[] twoSum(int[] nums, int target) { int i = 0, j = nums.length - 1, res; while (i < j) { res = nums[i] + nums[j]; if (res == target) return new int[]{nums[i], num原创 2021-08-05 16:23:38 · 83 阅读 · 0 评论 -
剑指 Offer 53 - II.0~n-1中缺失的数字(二分法变形)
二分法变形 class Solution { public int missingNumber(int[] nums) { int left = 0, right = nums.length - 1; while (left <= right) { int middle = (left + right) / 2; if (nums[middle] > middle) right原创 2021-07-30 15:33:54 · 85 阅读 · 0 评论 -
剑指 Offer 53 - I.在排序数组中查找数字 I(普通遍历、二分法和优化的二分法)
方法一:普通遍历 class Solution { public int search(int[] nums, int target) { int count = 0; for(int num : nums){ if(num == target) count++; } return count; } } 方法二:二分法 class Solution { publi原创 2021-07-29 10:26:14 · 99 阅读 · 0 评论 -
剑指 Offer 45.把数组排成最小的数(Arrays.sort()和快速排序)
方法一:Arrays.sort() package com.hc.ArrayAndString; import java.util.Arrays; import java.util.Comparator; public class Offer45 { public String minNumber(int[] nums) { String[] strs = new String[nums.length]; for (int i = 0; i < nums.l原创 2021-07-28 17:09:20 · 104 阅读 · 0 评论 -
剑指 Offer39.数组中出现次数超过一半的数字(冒泡排序、哈希表和摩尔投票法)
方法一:冒泡排序 class Solution { public int majorityElement(int[] nums) { for (int i = nums.length - 2; i >= 0; i--) { for (int j = 0; j <= i; j++) { if (nums[j] > nums[j + 1]) { int temp = nums原创 2021-07-27 16:41:49 · 97 阅读 · 0 评论 -
剑指 Offer 29.顺时针打印矩阵(设定边界)
方法一:设定边界 package com.hc.ArrayAndString; public class Offer29 { public int[] spiralOrder(int[][] matrix) { if (matrix.length == 0) return new int[0]; int left = 0, right = matrix[0].length - 1, top = 0, below = matrix.length原创 2021-07-26 17:58:49 · 107 阅读 · 0 评论 -
剑指 Offer 21.调整数组顺序使奇数位于偶数前面(首尾双指针+快慢双指针)
方法一:首尾双指针一 class Solution { public int[] exchange(int[] nums) { int end = nums.length - 1; for (int i = 0; i < nums.length; i++) { if (nums[i] % 2 == 0) { int j = end; for (j = end; j >原创 2021-07-24 10:32:04 · 93 阅读 · 0 评论 -
剑指 Offer 17.打印从1到最大的n位数(考虑或不考虑大数问题)
方法一:不考虑大数问题 class Solution { public int[] printNumbers(int n) { int num = (int) Math.pow(10, n) - 1; int[] numbers = new int[num]; for (int i = 1; i <= num; i++) { numbers[i - 1] = i; } return numb原创 2021-07-23 18:04:19 · 104 阅读 · 0 评论 -
剑指 Offer 11.旋转数组的最小值(二分法和普通遍历)
方法一:利用旋转数组部分单调递增的特点。 class Solution { public int minArray(int[] numbers) { if (numbers.length == 1) return numbers[0]; for (int i = 1; i < numbers.length; i++) { if (numbers[i] < numbers[i - 1])原创 2021-07-23 11:58:16 · 80 阅读 · 0 评论 -
剑指 Offer 05.替换空格(内置函数replace和StringBuilder)
class Solution { public String replaceSpace(String s) { s = s.replace(" ", "%20"); return s; } }原创 2021-07-22 14:37:31 · 153 阅读 · 0 评论 -
剑指 Offer 04.二维数组中的查找(二分法和普通遍历)
方法一:采用二分查找法 class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return false; for (int i = 0; i < matrix.length; i++) {原创 2021-07-21 14:02:21 · 123 阅读 · 0 评论