简简单单向前冲(*^o^)人(^o^*)
自己需要注意的题目 | 刷题时间 |
---|
Code03、Code04、Code07、Code08、Code09 | 2022-11-22 |
Code02、Code03、Code05 | 2022-11-23 |
2022-11-22,写了10道题目
一、2022/11/22
public class Code01 {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int middle = left + ((right - left) >> 1);
if (nums[middle] == target) {
return middle;
} else if (nums[middle] > target) {
right = middle - 1;
} else {
left = middle + 1;
}
}
return -1;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
public class Code02 {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int middle = left + ((right - left) >> 1);
if (nums[middle] == target) {
return middle;
} else if (nums[middle] > target) {
right = middle - 1;
} else {
left = middle + 1;
}
}
return (right + 1);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
public class Code03 {
public int[] searchRange(int[] nums, int target) {
int index = binarySearch(nums, target);
if (index == -1) return new int[]{-1, -1};
int left = index;
int right = index;
while (left - 1 >= 0 && nums[left - 1] == target) {
left--;
}
while (right + 1 < nums.length && nums[right + 1] == target) {
right++;
}
return new int[]{left, right};
}
private int binarySearch(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int middle = left + ((right - left) >> 1);
if (nums[middle] == target) {
return middle;
} else if (nums[middle] > target) {
right = middle - 1;
} else {
left = middle + 1;
}
}
return -1;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
public class Code04 {
public int mySqrt(int x) {
int left = 0;
int right = x;
int res = 0;
while (left <= right) {
int middle = left + ((right - left) >> 1);
if ((long) middle * middle <= x) {
res = middle;
left = middle + 1;
} else {
right = middle - 1;
}
}
return res;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
public class Code05 {
public boolean isPerfectSquare(int num) {
int left = 0;
int right = num;
while (left <= right) {
int middle = left + ((right - left) >> 1);
if ((long) middle * middle == num) {
return true;
} else if ((long) middle * middle > num) {
right = middle - 1;
} else {
left = middle + 1;
}
}
return false;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
public class Code06 {
public int removeElement(int[] nums, int val) {
int slow = 0;
int fast = 0;
while (fast < nums.length) {
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
public class Code07 {
public void moveZeroes(int[] nums) {
int slow = 0;
int fast = 0;
while (fast < nums.length) {
if (nums[fast] != 0) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
while (slow < nums.length) {
nums[slow] = 0;
slow++;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
public class Code08 {
public int removeDuplicates(int[] nums) {
int slow = 0;
int fast = 1;
while (fast < nums.length) {
if (nums[slow] != nums[fast]) {
slow++;
nums[slow] = nums[fast];
}
fast++;
}
return (slow + 1);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
public class Code09 {
public boolean backspaceCompare(String s, String t) {
int sNum = 0;
int tNum = 0;
int i = s.length() - 1;
int j = t.length() - 1;
while (true) {
while (i >= 0) {
if (s.charAt(i) == '#') {
sNum++;
} else {
if (sNum > 0) sNum--;
else break;
}
i--;
}
while (j >= 0) {
if (t.charAt(j) == '#') {
tNum++;
} else {
if (tNum > 0) tNum--;
else break;
}
j--;
}
if (i < 0 || j < 0) break;
if (s.charAt(i) != t.charAt(j)) return false;
i--;
j--;
}
if (i == -1 && j == -1) return true;
return false;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
public class Code10 {
public int[] sortedSquares(int[] nums) {
int len = nums.length;
int[] temp = new int[len];
int left = 0;
int right = len - 1;
int index = len - 1;
while (left <= right) {
if (nums[left] * nums[left] < nums[right] * nums[right]) {
temp[index] = nums[right] * nums[right];
right--;
} else {
temp[index] = nums[left] * nums[left];
left++;
}
index--;
}
return temp;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
2022-11-23,写了6道题目
二、2022/11/23
public class Code01 {
public int minSubArrayLen(int target, int[] nums) {
int slow = 0;
int fast = 0;
int sum = 0;
int len = Integer.MAX_VALUE;
while (fast < nums.length) {
sum += nums[fast];
while (sum >= target) {
len = Math.min(len, fast - slow + 1);
sum -= nums[slow];
slow++;
}
fast++;
}
return (len == Integer.MAX_VALUE ? 0 : len);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
public class Code02 {
public int totalFruit(int[] fruits) {
int slow = 0;
int fast = 0;
int ans = 0;
Map<Integer, Integer> map = new HashMap<>();
while (fast < fruits.length) {
if (map.containsKey(fruits[fast])) {
map.put(fruits[fast], map.get(fruits[fast]) + 1);
} else {
map.put(fruits[fast], 1);
}
while (map.size() > 2) {
map.put(fruits[slow], map.get(fruits[slow]) - 1);
if (map.get(fruits[slow]) == 0) {
map.remove(fruits[slow]);
}
slow++;
}
ans = Math.max(ans, fast - slow + 1);
fast++;
}
return ans;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
public class Code03 {
public String minWindow(String s, String t) {
Map<Character, Integer> sMap = new HashMap<>();
Map<Character, Integer> tMap = new HashMap<>();
int left = 0;
int right = 0;
int count = 0;
int start = 0;
int ans = Integer.MAX_VALUE;
for (char c : t.toCharArray()) {
if (tMap.containsKey(c))
tMap.put(c, tMap.get(c) + 1);
else
tMap.put(c, 1);
}
while (right < s.length()) {
char c = s.charAt(right);
right++;
if (tMap.containsKey(c)) {
if (sMap.containsKey(c))
sMap.put(c, sMap.get(c) + 1);
else
sMap.put(c, 1);
if (tMap.get(c).equals(sMap.get(c)))
count++;
}
while (count == tMap.size()) {
if (right - left < ans) {
ans = right - left;
start = left;
}
char d = s.charAt(left);
left++;
if (tMap.containsKey(d)) {
if (tMap.get(d).equals(sMap.get(d)))
count--;
sMap.put(d, sMap.get(d) - 1);
}
}
}
return ans == Integer.MAX_VALUE ? "" : s.substring(start, start + ans);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
public class Code04 {
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];
int loop = n / 2;
int middle = n / 2;
int offset = 1;
int count = 1;
int x = 0, y = 0;
while (loop-- > 0) {
int i = x;
int j = y;
for (; j < n - offset; j++)
ans[i][j] =count++;
for (; i < n - offset; i++)
ans[i][j] = count++;
for (; j > y; j--)
ans[i][j] = count++;
for (; i > x; i--)
ans[i][j] = count++;
x++;
y++;
offset++;
}
if (n % 2 == 1) {
ans[middle][middle] = count;
}
return ans;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
public class Code05 {
public List<Integer> spiralOrder(int[][] matrix) {
int upper = 0;
int down = matrix.length - 1;
int left = 0;
int right = matrix[0].length - 1;
List<Integer> res = new ArrayList<>();
while (true) {
for (int i = left; i <= right; i++)
res.add(matrix[upper][i]);
if (++upper > down) break;
for (int i = upper; i <= down; i++)
res.add(matrix[i][right]);
if (--right < left) break;
for (int i = right; i >= left; i--)
res.add(matrix[down][i]);
if (--down < upper) break;
for (int i = down; i >= upper; i--)
res.add(matrix[i][left]);
if (++left > right) break;
}
return res;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
public class Code06 {
public int[] spiralOrder(int[][] matrix) {
if (matrix.length == 0) return new int[]{};
int upper = 0;
int down = matrix.length - 1;
int left = 0;
int right = matrix[0].length - 1;
int[] ans = new int[(down + 1) * (right + 1)];
int index = 0;
while (true) {
for (int i = left; i <= right; i++)
ans[index++] = matrix[upper][i];
if (++upper > down) break;
for (int i = upper; i <= down; i++)
ans[index++] = matrix[i][right];
if (--right < left) break;
for (int i = right; i >= left; i--)
ans[index++] = matrix[down][i];
if (--down < upper) break;
for (int i = down; i >= upper; i--)
ans[index++] = matrix[i][left];
if (++left > right) break;
}
return ans;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32