笔试强训,约瑟夫环plus孩子们的游戏​编辑解法二.动态规划大数加法牛客.在字符串中找出连续的最长数字串力扣703.数据流中第K大元素​编辑

目录

约瑟夫环plus

孩子们的游戏​编辑

解法二.动态规划

大数加法

牛客.在字符串中找出连续的最长数字串

力扣703.数据流中第K大元素​编辑


约瑟夫环plus

孩子们的游戏

基本模拟,没啥特殊技巧

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @param m int整型
     * @return int整型
     */
    public static int LastRemaining_Solution (int n, int m) {
        // write code here
        int count=0;
        int del=0;
        int []arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=i;}
        while(del!=n-1){
            for(int i=0;i<n;i++){
                if(count==m-1&&arr[i]>-1){
                    arr[i]=-1;
                    count=0;
                    del++;
                }
                if(arr[i]>-1){
                    count++;
                }
                if(del==n-1){
                    break;
                }
            }
        }
        for(int i=0;i<n;i++){
            if(arr[i]!=-1){
                return arr[i];
            }
        }
        return 0;
    }
}

解法二.动态规划

1.状态表示:

dp[i]:当有i个孩子围成一圈时候最终获胜的孩子的编号

dp[1]=0 

状态转移方程:那么我们选择从里面的圈开始推,dp[n]=dp[n-1]+m

就是在里面n-1个人都已经获胜了,那么最外面的n个人获胜的也是它,那么我们只需要知道里面圆圈怎么推外面的关系。+m就会变成外面的坐标,当然他有可能加的很大,此时需要%n

​​​​​​​

大数加法

import java.util.*;

import java.math.BigInteger;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */

    public static String solve (String s, String t) {
        // write code here、
        BigInteger bigInteger1 = new BigInteger(s);
        BigInteger bigInteger2 = new BigInteger(t);
        ;
        return String.valueOf(bigInteger1.add(bigInteger2));
    }
}

牛客.在字符串中找出连续的最长数字串

思路,使用应该是双指针,在加上转变成字符数组,再去用ac码来做,因为大A65,小a97,我们只需要0-9即可。

力扣703.数据流中第K大元素

题意不好理解:但是代码很好写(蛮简单的还是),前k个大的,就去建立小堆,然后和堆顶比,假如比堆顶大,就入堆,然后pop,比堆顶小,出去

class KthLargest {
   PriorityQueue<Integer>heap;
   int _k;
    public KthLargest(int k, int[] nums) {
    _k=k;
    heap=new PriorityQueue<>();
    for(int i=0;i<nums.length;i++{
        heap.offer(nums[i]);
        if(heap.size()>_k){
            heap.poll();
        }
    }
}
    
    public int add(int val) {
     heap.offer(val);
     if(heap.size()>_k){
        heap.poll();
     }
     return heap.peek();
    }
}

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗哥不是甜妹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值