LeetCode 课程 Task01 学习打卡(2022年11月19日)

第 01 天题目

0001. 两数之和

  • 标签:数组、哈希表
  • 难度:简单
  • 题目描述

  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    你可以按任意顺序返回答案。

    解题思路

  • 使用双循环算法判断每一组的和是否等于目标值,如果是,定义一个长度为2的数组a,将两个数字保存在数组a中,最后返回数组a,若不是,返回数组a。
  • 时间复杂度小于O(n2)
  • 代码实现:
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] a = new int[2];
        int n = nums.length;
        for(int i = 0;i < n ; i++){
            for(int j = i + 1 ; j < n ; j++){
                if(nums[i] + nums[j] == target){
                   a[0] = i;
                    a[1] = j;
                    return a;
                }
            }
        }
        return a;
    }
}

第二天题目

0704.二分查找

标签:二分查找

难度:简单

题目描述

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

解题思路

给的数组是有序且递增的,那么我们就可以用二分法查找。首先选择数组中间的数字和目标值对比,如果相等直接返回数组中间下标对应的值;如果中间数字对应的值大于目标值,直接排除数组中间数字向右的值,同时将数组中间的下标变为上限,继续查找;如果中间数字对应的值小于目标值,直接排除数组中间数字向左的值,同时将数组中间+1的下标变为下限,继续查找;如果都找不到就返回-1。

代码实现:

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length;
        while (left < right){
            int middle = left + (right - left) / 2;
            if (nums[middle] > target){
                right = middle;
            }
            else if (nums[middle] < target){
                left = middle + 1;
            }
            else{
                return middle;
            }
        }
        return -1;
    }
}

第三天题目:

0027.移除元素

标签:数组

难度:简单

题目描述:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

题解思路:

先找到数组中数组共有多少个数字与val的值不相等,记为则有  len  -   count  个元素与val的值相等。按顺序逐个扫描数组,找出第一个与val相等的元素,将它移到数组的最后一个位置处。按顺序逐个扫描数组,找出第二个与val相等的元素,将它移到数组的倒数第二个位置处。 按顺序逐个扫描数组,找出第  i 个与 val 相等的元素,将它移到数组的倒数第len  -   k  -1位置处。

代码实现:

class Solution {
    public int removeElement(int[] nums, int val) {
    int i=0;
    int count=0;
    int len=nums.length;
    for(i=0;i<len;i++){
        if(nums[i]!=val)
        {
            count++;
        }
    }
    int t=count;
    for(int k=0;k<len-count;k++)
    {
        for(i=0;i<len;i++)
        if(nums[i]==val)
        {
            int tmp=nums[i];
            nums[i]=nums[len-k-1];
            nums[len-k-1]=tmp;
        }
    }
    return t;
    }
}

第四天题目:

0009.回文数

标签:字符串

难度:简单

题目描述:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

题解思路:

首先判断X是否是负数,如果是负数直接输出false,然后判断X是几位数,就将temp赋值为几位数,然后需要获取X第一位和最后一位,判断是否相同,之后将X比较过的第一位和最后一位去掉,注意X变化后temp也要跟着变。

代码实现:

第五天题目:

0020.有效的括号

标签:栈

难度:简单

题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

题解思路:

这道题目很有意思,就和俄罗斯方块一样,但还有些区别,借助栈,先进去左括号“(,{,[”三个中的任何一个都行,进入栈后,下一个括号进入栈与其相匹配,如果相匹配则两个弹出栈,继续下面的操作,当最后栈里是empty时,返回True。

代码实现:

class Solution {
    public boolean isValid(String s) {
        Stack<Character>stack=new Stack<>();
        for(char c:s.toCharArray()){
            if(c=='{'||c=='['||c=='('){
                stack.add(c);
            }else{
                if(stack.size()==0){
                    return false;
                }
                char c1=stack.peek();
                if(c=='}'){
                    if(c1=='{'){
                        stack.pop();
                    }else{
                        return false;
                    }
                }else if(c==']'){
                    if(c1=='['){
                        stack.pop();
                    }else{
                        return false;
                    }
                }else{
                    if(c1=='('){
                        stack.pop();
                    }else{
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();
    }
}

第六天题目:

0035.搜索插入位置

标签:数组

难度:简单

题目描述:

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

题解思路:

形参是一个排序数组和一个目标值,先遍历这个排序数组,与目标之一个个比对,如果数组里的数大于等于目标值,则返回数组的下标,遍历完之后,数组里的数如果没有大于等于目标值的,则返回这个数组的长度,数组的长度即为插入数的下标

代码实现:

class Solution {
    public int searchInsert(int[] nums, int target) {
    for(int i = 0; i < nums.length;i++){
        if(nums[i] >= target){
            return i;
        }
    }
    return nums.length;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值