代码随想录
代码随想录
夜雨柠檬704 二分查找
定义两个指针, left 和 right, 值取左闭右闭,即 left = 0, right = nums.length - 1
while 循环条件则要遵循上面定义好的边界, 左闭右闭, 所以 left 可以 = right, 则 while (left <= right)
while 循环中要严格按照区间的定义来写, 符合 left right 区间, 就是对的
middle = (left + right) / 2 为了防止溢出, 可以写为 middle = left + ((right - left) / 2)
27 移除元素
我这里用了左指针和右指针, 区间也是闭合的, 所以 while (left <= right), count = nums.length 为新数组初始长度
从 left 开始循环
当 if (nums[left] == val), 将 left 和 right 的值互换, right–, 因为返回的数组只取它移除元素后的长度, 所以要移除的元素必须在数组的后面, count–
else left++
977 有序数组的平方
原始数组是从小到大, 有负数, 平方后会怎么样呢, 两边大中间小
那我们可以定义双指针, 同样是左闭右闭, left = 0, right = nums.length - 1
重新生成一个新数组 int[] result = new int[nums.length]
因为是从小到大排序, 那循环 result 时, 从后向前循环
if (nums[left] * nums[left] > nums[right] * nums[right]), 则 result[i] = nums[left] * nums[left], left++,
else result[i] = nums[right] * nums[right], right–,