LeetCode刷题记---5980/5194/382/1480/1486

(该板块博客仅为记录本人的leetcode练习)


leetcode周赛,只会前两道。。。。。第三道知道是动态规划但是没写出来😅(第三题智力问题)

5980.将字符串拆分为若干长度为k的组(简单)

在这里插入图片描述
解题思路:模拟。

代码:

package LeetCode.Code2022.January;

public class Solution5980 {
    public String[] divideString(String s, int k, char fill) {

        int len = s.length();
        String[] ans = new String[(len + k - 1) / k ];
        int j = 0, i;
        for (i = 0; i < len; i = i + k) {
            if (i + k <= len) {
                ans[j++] = s.substring(i, i + k);
            }
        }
        if (i != len) {
            StringBuilder s1 = new StringBuilder(s.substring(i - k, len));
            for (j = 0; j < i - len; j++) {
                s1.append(fill);
            }
            ans[ans.length - 1] = s1.toString();
        }
        return ans;

    }
}


5194.得到目标值的最少行动次数(中等)

在这里插入图片描述

解题思路:从目标值开始递减,当目标值为偶数且maxDouble值不为零这直接减半,反正将目标值减一,当maxdouble值为0时,直接进行target - 1即为到达1的所需步数

代码:

package LeetCode.Code2022.January;

public class Solution5194 {
    public int minMoves(int target, int maxDoubles) {

        int step = 0;
        while (target != 1) {
            if (maxDoubles == 0) {
                step += target - 1;
                break;
            }
            if (target % 2 == 0 && maxDoubles != 0) {
                target = target / 2;
                maxDoubles--;
            } else {
                target--;
            }
            step++;
        }
        return step;

    }
}


382.链表随机节点(中等)

在这里插入图片描述

解题思路:拿到listNode之后将里面的元素初始化到List中,然后转化为一维数组,这个通过下标寻值更快,下标生成的方式是Math.random,保证生成的下标概率相当。

代码:


package LeetCode.Code2022.January;

import LeetCode.Utils.ListNode;

import java.util.ArrayList;
import java.util.List;

public class Solution382 {
    List<Integer> list;
    Integer[] arr;
    public Solution382(ListNode head) {
        ListNode node = head;
        list = new ArrayList<>();
        while (node != null) {
            list.add(node.val);
            node = node.next;
        }
        arr = list.toArray(new Integer[0]);
    }

    public int getRandom() {
        int index = (int) (Math.random() * arr.length);
        return arr[index];
    }
}

1480.一维数组的动态和(简单)

在这里插入图片描述

解题思路:计算数组前缀和

package LeetCode.Code2022.January;

public class Solution1480 {
    public int[] runningSum(int[] nums) {
        
        int[] ans = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            if (i == 0) {
                ans[i] = nums[i];
                continue;
            }
            ans[i] = ans[i - 1] + nums[i];
        }
        return ans;

    }
}

1486.数组异或操作(简单)

在这里插入图片描述

解题思路:直接异或,简单题思路个屁

package LeetCode.Code2022.January;

public class Solution1486 {
    public int xorOperation(int n, int start) {
        
        int ans = start;

        for (int i = 1; i < n; i++) {
            ans ^= (start + i * 2);
        }

        return ans;

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值