代码随想录 Day 1 – 数组 ①1~4
提示:分析时间复杂度即可,不必太在意执行用时。
Carl 语录:大家不必太在意leetcode上执行用时,打败多少多少用户,这个就是一个玩具,非常不准确。做题的时候自己能分析出来时间复杂度就可以了,至于leetcode上执行用时,大概看一下就行,只要达到最优的时间复杂度就可以了,一样的代码多提交几次可能就击败百分之百了`
LeetCode题目链接:
704.二分查找
27.移除元素
977.有序数组的平方
问题描述
提示:这里描述项目中遇到的问题:
1.数组理论
(1)数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
2.
3.移除元素
3.1题目分析:
原句:
“元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。”
翻译:
1.可以用右边的元素替换左边的元素;
2.无须修改右边元素;
3.替换时长度 减1;
3.2 解决方案:
自己的代码:
相向指针法:时间复杂度 O(n)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0, right = nums.size() - 1;
int count = 0;
while(left <= right)
{
while(left <= right && nums[right] == val) {right--; count++;} //寻找右边非val的元素
if(left <= right && nums[left] == val) {
nums[left] = nums[right]; //将其替换至左边
// nums[right] = val; // 此处将右边元素的值改为val,则下一个循环中自动right--。不对,这样不便于计数
left++;
right--;
count++;
}else{
left++;
}
}
return nums.size() - count;
}
};
4.
@Override
public void run() {
bytes = mmInStream.read(buffer);
mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
}
原因分析:
提示:这里填写问题的分析:
解决方案:
提示:这里填写该问题的具体解决方案:
例如:新建一个 Message
对象,并将读取到的数据存入 Message
,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
换成 mHandler.sendMessage()
。