Leetcode 数据结构刷题 ->链表1
[27. 移除元素]移除等于所给值的元素我们可以直接使用双指针对着来的。关键就是把不等于x的值我改一下没用val放到后面去这样前面就全部都是不等于x值再计数即可。看代码就对了。class Solution { public: int removeElement(vectorint nums, int x) { int i 0, j nums.size() - 1; for(int k nums.size() - 1; k 0; k --){ if(nums[k] ! x) break; j --; } //这里就是先把原本后面就是等于x的先排掉 while(i j){ if(nums[j] x) j --; if(nums[i] x nums[j] ! x) swap(nums[i], nums[j]), j --; if(nums[i] ! x) i ; //注意这里不然会死因为有可能nums[i] x,nums[j]也等于 } int ans 0; for(int k 0; k nums.size(); k ){ if(nums[k] x) break; ans ; } return ans; } };[67. 二进制求和]二进制求和直接模拟就行无需多言class Solution { public: string addBinary(string a, string b) { string ans; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); //先反转字符串 int n max(a.size(), b.size()); //先找到最长的 int car 0; //进位用的 for(int i 0; i n; i ){ car i a.size() ? a[i] - 0 : 0;//如果有数字就-0 car i b.size() ? b[i] - 0 : 0;//如果没数字就为0 ans ((car % 2) ? 1 : 0); //如果是car car 1; } if(car) ans 1; //最后一位的进位 reverse(ans.begin(), ans.end()); //反转因为是反着来计算的 return ans; } };[26. 删除有序数组中的重复项]这是去重的题目很容易想到用set去做虽然时间复杂度不是最优但代码真的好写。这里会检查数组的情况记得要再过一遍就是复制。class Solution { public: int removeDuplicates(vectorint nums) { setintst(nums.begin(), nums.end()); int i 0; for(auto it : st){ nums[i ] it; } return st.size(); } };[80. 删除有序数组中的重复项 II]最朴素的双指针一快一慢。只要相隔两个的元素做一次检查如果不一样就进行移动把后面的一道前面来。class Solution { public: int removeDuplicates(vectorint nums) { if(nums.size() 2) return nums.size(); int i 2 , j 2; for(; i nums.size(); i ){ if(nums[i] ! nums[j - 2]){ nums[j ] nums[i]; } } return j; } };
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2454962.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!