模拟
九幽孤翎
蜉蝣只有认清自己的渺小,才能有化茧成蝶的一天
展开
-
Leetcode_599_两个列表的最小索引总和_模拟
注意一下可以通过i <= sumOfIndex进行一个剪枝class Solution { public String[] findRestaurant(String[] list1, String[] list2) { Map<String, Integer> map = new HashMap<>(); int len1 = list1.length; int len2 = list2.length;原创 2022-03-14 18:34:21 · 255 阅读 · 0 评论 -
Leetcode_2055_蜡烛之间的盘子_前缀和
一开始的思路是找到区间内第一个蜡烛和最后一个蜡烛,最后计算这两个蜡烛之间的盘子数量,当然超时了。那么怎么去优化这两个步骤呢,第一个步骤我采取了记录蜡烛位置的方式,通过二分查找区间上下限,定位到第一个蜡烛和最后一个蜡烛的下标;第二个步骤我采取前缀和数组的方式,记录前i个元素中盘子的个数。class Solution { public int[] platesBetweenCandles(String s, int[][] queries) { int m = queries.len原创 2022-03-08 10:32:40 · 163 阅读 · 0 评论 -
Leetcode_剑指Offer04_二维数组中的查找_二分/线性查找
前两天一面的原题,二分还是效率最高的做法,使用那个删行/列复杂度还是有点高class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { int n = matrix.length; if(n == 0) { return false; } int m = matrix[0].length; if原创 2022-03-07 09:26:46 · 154 阅读 · 0 评论 -
Leetcode_504_七进制数_模拟
特殊情况得多考虑一下class Solution { public String convertToBase7(int num) { if(num == 0) { return "0"; } int temp = num; StringBuilder sb = new StringBuilder(); while(temp != 0) { sb.append(Math.a原创 2022-03-07 09:15:57 · 81 阅读 · 0 评论 -
Leetcode_43_字符串相乘_模拟
好像大一打acm写过?无法理解这竟然是一道面试高频题。。class Solution { public String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) { return "0"; } StringBuilder ans = new StringBuilder("0"); int m = n原创 2022-03-03 21:10:43 · 99 阅读 · 0 评论 -
Leetcode_6_Z字形变换_模拟
这个特判属实很坑,绕不过去,题倒是没难度class Solution { public String convert(String s, int numRows) { if(numRows == 1) { return s; } StringBuilder[] sbs = new StringBuilder[numRows]; for(int i = 0;i < numRows;i++) {原创 2022-02-28 10:13:36 · 102 阅读 · 0 评论 -
Leetcode_224_基本计算器_模拟
这道题不能上来就没脑子的去模拟压栈,应该去仔细观察题目并思考;题目中只有±的运算,也就是说对于字符串中的每个数,我们要么加到总和里要么把他的相反数加进来,那么具体加哪个,要看目前的正负号情况,因为有括号的存在,我们需要存储当前括号的正负号情况,我选用了栈来保存。import java.util.Deque;import java.util.LinkedList;class Solution { public int calculate(String s) { int len原创 2021-09-15 16:27:42 · 111 阅读 · 0 评论 -
Leetcode_68_文本左右对齐_模拟
import java.util.ArrayList;import java.util.List;class Solution { public List<String> fullJustify(String[] words, int maxWidth) { List<String> ans = new ArrayList<>(); int len = words.length; int now = words原创 2021-09-09 09:55:45 · 499 阅读 · 0 评论 -
Leetcode_415_字符串相加_模拟
// 冲刺026class Solution { public String addStrings(String num1, String num2) { int i = num1.length() - 1, j = num2.length() - 1, add = 0; StringBuffer ans = new StringBuffer(); while (i >= 0 || j >= 0 || add != 0) {原创 2021-08-27 14:40:41 · 87 阅读 · 0 评论 -
Leetcode_1583_统计不开心的朋友_模拟
写了一坨屎山,我自己都看不下去了orz很明显x和u的循环是可以合并的,y和v的循环也是可以合并的既然编号都是有序的,那直接用数组就完事了,存个der的hash表,还得浪费时间去找索引,懒得改了,ac就完事了class Solution { public int unhappyFriends(int n, int[][] preferences, int[][] pairs) { int ans = 0; int len = pairs.length;原创 2021-08-14 20:29:31 · 89 阅读 · 0 评论 -
Leetcode_233_数字1的个数_数位dp/模拟
我们先计算 0-9, 0-99 ,0-999的答案cnt[0-9]=1cnt[00-99]=十位上的1 + 个位上的1 = 10 + 10组 * cnt[0-9]cnt[000-999]=百位上的1 + 十位上的1 + 个位上的1 = 100 + 10组 * cnt[00-99]找到规律:cnt[0-n位9] =10(n-1) + 10 * cnt[0-(n-1)位9]然后我们从最低位开始计算答案,这里以195为例子1.计算1位,0~5,只有1个12.计算2位,00~95,00~95 = 90原创 2021-08-14 18:21:57 · 158 阅读 · 0 评论 -
Leetcode_754_到达终点数字_模拟
12/18用公式计算出x(sum[1,x]>=target)如果之间的差为偶数,直接返回x(比如差值是2,我们只需要把+1变成-1,差值是4,我们只需把+2变成-2)如果差值是奇数,如果总步数为偶数, 通过翻转我们能获得target-1,我们要走一步(翻转最后一步,并再往前走一步)如果总步数为奇数, 通过翻转我们能获得target+1,我们要走两步(先前进n步再后退n+1步数)class Solution { public int reachNumber(int targe原创 2020-12-18 16:28:12 · 360 阅读 · 1 评论 -
Leetcode_665_非递减数列_模拟
12/18你管这叫简单?有cf div2A题的难度class Solution { public boolean checkPossibility(int[] nums) { boolean flag=false; if(nums.length<=2){ return true; } if(nums[0]>nums[1]){ flag=true;原创 2020-12-18 09:40:43 · 339 阅读 · 0 评论 -
Leetcode_1680_连续连续二进制数字_模拟
12/12找规律public class Solution { private static final int MOD = 1000000007; public int concatenatedBinary(int n) { int res = 0, shift = 0; for (int i = 1; i <= n; i++) { if ((i & (i - 1)) == 0) {原创 2020-12-12 12:02:43 · 316 阅读 · 0 评论 -
Leetcode_649_参议院_模拟_贪心
12/11用队列模拟class Solution { public String predictPartyVictory(String senate) { int n = senate.length(); Queue<Integer> R = new LinkedList<>(); Queue<Integer> D = new LinkedList<>(); for (int i =原创 2020-12-11 09:10:06 · 320 阅读 · 0 评论 -
Leetcode_2_两数相加_模拟
12/9注意一下循环终止条件不光是遍历到两个链表尾部,还要进位为0class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode bef = new ListNode(); ListNode head = bef; int flag = 0; int nowval; while (true) {原创 2020-12-09 19:27:51 · 314 阅读 · 0 评论 -
Leetcode_62_不同路径_组合数
12/9一看就是组合数,然后我写组合数写了半天......一定要并行运算,不然会爆long范围,int范围肯定会爆class Solution { public int uniquePaths(int m, int n) { if(n>m){ n+=m; m=n-m; n-=m; } long ans=1; for(int i=m;i<=m+n-原创 2020-12-09 08:57:34 · 366 阅读 · 0 评论 -
Leetcode_861_翻转矩阵后的得分_模拟
12/7个人感觉实现的还挺优雅class Solution { public int matrixScore(int[][] A) { int n=A.length; int m=A[0].length; for(int i=0;i<n;i++){ if(A[i][0]==0){ for(int j=0;j<m;j++){ A[i][j]=原创 2020-12-07 07:08:27 · 312 阅读 · 0 评论 -
PAT甲级1002_A+B for Polynomials_模拟
易错点题目要求输出非0的系数但是非零并不等价于不在AB两个数组里如果在AB两个数组里出现过,但运算后系数为0,仍不要输出#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = ~0u >> 2; //1073741823const ll INF = ~0ull >> 2; //4611686018427387903const int maxn =原创 2020-12-03 12:27:04 · 287 阅读 · 0 评论 -
PAT甲级1001_A+B Format _模拟
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = ~0u >> 2; //1073741823const ll INF = ~0ull >> 2; //4611686018427387903const int maxn = 1e3 + 10;int main(){ //Solution s = Solution(); int a, b; s原创 2020-12-01 19:00:44 · 300 阅读 · 0 评论 -
Leetcode_283_移动零_模拟
11/19算法遍历数组,用一个arraylist来存每个零的下标,如果找到了一个非零元素并且arraylist不为空,则将该元素与最前面的零元素交换位置,并动态更新arraylistclass Solution { public void moveZeroes(int[] nums) { ArrayList<Integer> a = new ArrayList<Integer>(); int n=nums.length;原创 2020-11-19 12:11:23 · 290 阅读 · 0 评论 -
Leetcode_1370_上升下降字符串_模拟
11/25简单模拟class Solution { public String sortString(String s) { String ans = ""; int n = s.length(); int[] cnt = new int[27]; for (char i = 0; i < n; i++) { cnt[s.charAt(i) - 'a']++; } whi原创 2020-11-25 09:06:29 · 294 阅读 · 0 评论