![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode初级
LeetCode初级刷题,使用c++、java、python解题,防止忘记学过的编程语言
Geek_Y
这个作者很懒,什么都没留下…
展开
-
LC 反转字符串
传送门思路对称位置交换代码class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ n=len(s) # 对称位置交换 for i in range(n//2): s[i],s[n-i原创 2021-08-15 01:20:36 · 162 阅读 · 0 评论 -
LC 旋转图像
传送门思路先找到从外到内一共几层,每层旋转当前层的n-1个数,就将每个数都与固定位置的数进行顺时针替换即可。代码class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ n=len(matrix[0])#找到矩阵的n原创 2021-08-15 01:06:59 · 158 阅读 · 0 评论 -
LC 有效的数独
传送门解法一:思路: 既然是判断横纵和每个3*3块中是否有重复的,就会想到用set,然后再分别考虑即可。我的解法时间复杂度没考虑好,空间复杂度击败98%user。class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: #1.横向扫 for i in board: #找出所有数字 h=[j for j i原创 2021-08-11 00:17:23 · 134 阅读 · 0 评论 -
LC 两数之和
传送门解法一思路: 遍历数组,然后用m=target-n,在当前数后面的数组里找m,如果存在就返回两个数的索引class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i,n in enumerate(nums): m=target-n if m in nums[i+1:]: j=nums[原创 2021-08-07 01:41:31 · 159 阅读 · 0 评论 -
LC 移动零
解法一:比较耗时class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ #判断临界 L=len(nums) if L<=1: return #找到0的个数 zeros=原创 2021-08-05 00:14:30 · 83 阅读 · 0 评论 -
加一
加一python解法先转为实数,然后加一,最后转为list输出。class Solution: def plusOne(self, digits: List[int]) -> List[int]: #先转为实数 num=int("".join([str(_) for _ in digits]))+1 #转为list return [int(_) for _ in str(num)]c++解法/**我的解法:比较蠢,硬原创 2021-03-03 17:43:19 · 126 阅读 · 1 评论 -
两个数组的交集 II
两个数组的交集 II题目链接解题思路先排序,然后双指针遍历c++解法class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { //排序 sort(nums1.begin(),nums1.end()); sort(nums2.begin(),nums2.end());原创 2021-02-03 21:45:42 · 92 阅读 · 0 评论 -
只出现一次的数字
只出现一次的数字题目链接c++解法第一种解题思路是:使用map来实现,线性时间复杂度,但是使用了额外空间。class Solution {public: int singleNumber(vector<int>& nums) { //使用map来做 map<int,int> mmap; for(auto i:nums){ if(mmap.count(i)==0) mmap[i]=1;原创 2021-02-03 00:23:49 · 76 阅读 · 0 评论 -
存在重复元素
存在重复元素题目链接解题思路使用set集合,集合会自动将重复元素合并为一个,最后判断集合中元素个数和数组长度即可。c++解法class Solution {public: bool containsDuplicate(vector<int>& nums) { set<int> sset;//把所有元素放到一个set里 int len=nums.size(); for(int i=0;i<len;i++)原创 2021-02-02 18:44:37 · 536 阅读 · 1 评论 -
旋转数组
旋转数组题目链接解题思路最容易想到的解题方法就是使用额外的数组空间,但是如果在空间复杂度为O(1)的情况下也是很好理解的,只是发现其中的规律比较难。这个规律就是进行三次数组翻转,如下图:需要注意的是k有可能大于数组长度,所以先将k取余c++解法class Solution {public: void rotate(vector<int>& nums, int k) { k%=nums.size(); reverse(nums.beg原创 2021-02-02 18:27:34 · 90 阅读 · 1 评论 -
买卖股票的最佳时机 II
买卖股票的最佳时机 II题目链接贪心算法根据题意,给出每天股票的价格,利用贪心算法思想,可以将当天和前一天的价格差,然后取大于零的差的和,就是所能获取的最大利润。可以使用折线图帮助理解,每一点代表每一天都卖出前一天的,然后买入当天的,然后只取上升的部分即可。c++解法class Solution {public: int maxProfit(vector<int>& prices) { int res=0; for(int i=0;i原创 2021-01-30 21:50:18 · 84 阅读 · 0 评论 -
LC 删除排序数组中的重复项
删除排序数组中的重复项题目链接解题思路使用双指针,i指针遍历整个数组,每相邻两个进行判断,如果不相等,就使用k指针重新赋值前面的数。代码c++解法class Solution {public: int removeDuplicates(vector<int>& nums) { int k=0;//保存不重复数字的个数 for(int i=0;i<nums.size();i++) if(i==0||nums原创 2021-01-28 22:31:12 · 154 阅读 · 5 评论