我的思路:
使用二分查找
代码实现:
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; } }
|
执行结果:
其他解法:
从左向右遍历数组,当遇到比 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; }
|
我的思路:
设置 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; } }
|
我的思路:
遍历字符串中的字符,每次遇到空格记录之前遍历过的长度。
无法处理尾部空格等问题,没有实现。
更好的思路:
从末尾向前遍历,遇到非空字符 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; } }
|