大二计科人的Java力扣之旅 day1

LeetCode-Java day1

进入大学早已度过一年,现如今大二上学期也即将结束,看了看我自己的算法的(虽然大一上早早注册了牛客和力扣的账号)。。。。好吧,大一太过于摸鱼了,于是痛定思痛,决定开启每日两力扣的锻炼之旅!

话不多说,直接开刷!


Leet-----1991.找到数组的中间位置

给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。

中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。

如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0

请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1

emmmm,果不其然,看到题目第一想法只有for循环暴力解决------
设置一个索引进行移动,然后移动过程中比较左右两边之和是否相等

class Solution {
    public int findMiddleIndex(int[] nums) {
         int index=0;

            for (int i = 0; i < nums.length; i++) {
                int left=0;
                int right=0;
                for (int j = 0; j <index ; j++) {
                    left+=nums[j];
                }
                for (int j = index+1; j <nums.length ; j++) {
                    right+=nums[j];
                }
                if(left==right)
                {
                    break;
                }
                index++;
            }
        return index>=nums.length?-1:index;
    }
}

题目倒是对了。。。但是这也太不优雅了吧~~

最后由于第一次做题有点沉不下心(连怎么思考都貌似没有方向。。),就去翻了翻大佬们的题解。。。真的想给自己一耳刮子。

class Solution {
    public int findMiddleIndex(int[] nums) {
        int left=0;
        int right=0;

        for(int num:nums){
            right += num;
        }    
    for(int i=0;i<nums.length;i++){
        if(i!=0)
        {
            left+=nums[i-1];
    
        }
        right-=nums[i];
        if(right==left)
        return i;
    }
    return -1;
    }
}


搜索插入位置

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

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

嘛。。即使知识再匮乏,也会第一时间想到二分查找了(尤其logn)

开撸开撸
这里主要是注意一下while结束条件防止越界啥的

class Solution {
    public int searchInsert(int[] nums, int target) {
       int index = nums.length/2;
       int l =0;
       int r=nums.length-1;
    while(l<=r) {
            if(target == nums[index])
            return index;
            if(target>nums[index]){
                l=index+1;      
            }
            else{
                r=index-1;
            }
            index=(l+r)/2;
        }
         return l;
    }
}

嘛,写完后也想到可以直接暴力解决,不过感觉不算难这里也就不写出来了。


小结

力扣第一天,还是比较友好,至少是在短时间完成了,害。。。大一就是年少太无知,当时c语言连循环都没学到就来力扣了,真该死,当时直接给咱劝退了,后面学了数组又来了一次,按照序号来做,入坑即退坑(emmm)

第一天就不多说啥了,保留坚持下去的心就好了~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值