C# 数据结构与算法:Leetcode同步练习(一)

Leetcode 1:两数之和

public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        for(int i=0;i<nums.Length;i++)
        {
            for(int j=i+1;j<nums.Length;j++)
            {
                if(nums[i]+nums[j]==target)
                {
                    return new int[] {i,j};
                }
            }
        }
        return new int[] {0,0};
    }
}

Leetcode 26:删除排序数组中的重复项

public class Solution {
    public int RemoveDuplicates(int[] nums) {
        if(nums.Length==0)
        return 0;
        int i=0;
        for(int j=1;j<nums.Length;j++)
        {
            if(nums[j]!=nums[i])
            {
                i++;
                nums[i]=nums[j];
            }
        }
        return i+1;
    }
}

Leetcode 27:移除元素

public class Solution {
    public int RemoveElement(int[] nums, int val) {
        int i=0;
        for(int j=0;j<nums.Length;j++)
        {
            if(nums[j]!=val)
            {
                nums[i]=nums[j];
                i++;
            }
        }
        return i;
    }
}

Leetcode 53:最大子序和

public class Solution {
    public int MaxSubArray(int[] nums) {
        if(nums.Length==0)
        return 0;
        if(nums.Length==1)
        return nums[0];
        int max=int.MinValue;
        int sum=0;
        for(int i=0;i<nums.Length;i++)
        {
            sum=Math.Max(sum,0);
            sum+=nums[i];
            max=Math.Max(sum,max);
        }
        return max;
    }
}

Leetcode 11:盛水最多的容器

public class Solution {
    public int MaxArea(int[] height) {
        int i=0;
        int j=height.Length-1;
        int max=int.MinValue;
       do
        {
            int s=(j-i)*Math.Min(height[i],height[j]);
            if(s>max)
            {
                max=s;
            }
            if(height[i]<height[j])
            {
                i++;
            }
            else
            {
                j--;
            }
        }while(i<j);
        return max;
    }
}

Leetcode 33:搜索旋转排序数组

public class Solution {
    public int Search(int[] nums, int target) 
    {
       int i = 0;
       int j = nums.Length - 1;
        while (i<=j)
        {
            int mid = Convert.ToInt32((i+j)/2);
            if (nums[i] == target)
            {
                return i;
            }
            else if (nums[j] == target)
            {
                return j;
            }
            else if (nums[mid] == target)
            {
                return mid;
            }
            i++;
            j--;
        }
        return -1;
    }
}

Leetcode 215:数组中的第k个最大元素

public class Solution {
    public int FindKthLargest(int[] nums, int k) {
        nums=nums.OrderBy(a=>a).ToArray();
        return nums[nums.Length-k];

    }
}

Leetcode 238:除自身以外数组的乘积

public class Solution {
    public int[] ProductExceptSelf(int[] nums) {
        int[] output1=new int[nums.Length];
        int[] output2=new int[nums.Length];
        output1[0]=1;
        output2[nums.Length-1]=1;
        for(int i=1;i<nums.Length;i++)
        {
            output1[i]=output1[i-1]*nums[i-1];
            output2[nums.Length-i-1]=output2[nums.Length-i]*nums[nums.Length-i];
        }
        for(int i=0;i<nums.Length;i++)
        {
            output1[i]*=output2[i];
        }
        return output1;
    }
}

Leetcode 4:寻找两个有序数组的中位数

public class Solution {
    public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
        int i = nums1.Length;
        int j = nums2.Length;
        int len = i+j;
        var resultIndex = len/2;
        List<int> list = new List<int>(nums1);
        list.AddRange(nums2);
        list.Sort();
        if (len%2==0)
        {
            return (list[resultIndex - 1] + list[resultIndex])/2.0;
        }
        else
        {
            return list[resultIndex];
        }
    }
}

Leetcode 41:缺失的第一个正数

public class Solution {
    public int FirstMissingPositive(int[] nums) {
        for(int i=0;i<nums.Length;i++)
        {
            while(nums[i]!=i+1&&nums[i]<=nums.Length&&nums[i]>0&&nums[i]!=nums[nums[i]-1])
            {
                int t=nums[i];
                nums[i]=nums[t-1];
                nums[t-1]=t;
            }
        }
        for(int i=0;i<nums.Length;i++)
        {
            if(nums[i]!=i+1)
            {
                return i+1;
            }
        }
        return nums.Length+1;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值