1. 搜索插入位置

image-20200701162747314
我的思路:

使用二分查找

代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int searchInsert(int[] nums, int target) {

if (nums.length==) return 0;

int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = left + (right -left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
}
执行结果:
image-20200701162902446
其他解法:

从左向右遍历数组,当遇到比 target 相同或比 target 大的数时,返回该数的索引。

1
2
3
4
5
6
7
8
public int searchInsert(int[] nums, int target) {
for(int i = 0; i < nums.length;i++){
if(nums[i] >= target){
return i;
}
}
return nums.length;
}

2. 最大子序和

image-20200701172238221
我的思路:

设置 sum 记录各数字的和,如果 sum < 0 ,与后面数相加只会使和更小,故作清零处理,然后继续与后面相加。

用 res 存储在相加过程中出现的最大的 sum 值,返回。

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public int maxSubArray(int[] nums) {
int sum = 0;
int res = nums[0];
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
res = Math.max(res, sum);
if (sum < 0) sum = 0;
}
return res;
}
}

3. 最后一个单词的长度

image-20200701175045407
我的思路:

遍历字符串中的字符,每次遇到空格记录之前遍历过的长度。

无法处理尾部空格等问题,没有实现。

更好的思路:

从末尾向前遍历,遇到非空字符 length++ ,遇到空格且 length 不为 0,返回 length

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int lengthOfLastWord(String s) {
int length = 0;
for (int i = s.length() - 1; i>= 0; i--) {
if (s.charAt(i) != ' ') {
length++;
} else if (length != 0) {
return length;
}
}
return length;
}
}