力扣
一只小小狗
大家好我是练习时长2年半的程序员
展开
-
模拟穷举 731. 我的日程安排表 II
如果出现了三个线段在一个时段出现了,则就是三重。原创 2022-07-20 14:00:16 · 78 阅读 · 0 评论 -
线段树-区间修改树
提供三种方法在选择的区间上一同加V在选择的区间上一同修改成V获取区间中的总和。原创 2022-07-20 13:28:09 · 124 阅读 · 0 评论 -
dfs 牛客 迷宫问题
输入描述输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。输出描述左上角到右下角的最短路径,格式如样例所示。...原创 2022-07-18 17:27:02 · 336 阅读 · 0 评论 -
二分查找 33. 搜索旋转排序数组
例如,[0,1,2,4,5,6,7]在下标3处经旋转后可能变为[4,5,6,7,0,1,2]。给你旋转后的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1。你必须设计一个时间复杂度为O(logn)的算法解决此问题。...原创 2022-07-18 16:12:13 · 148 阅读 · 0 评论 -
将一个字符串转换成整数(java考虑边界)
输入类型可以为 +xxxx -xxxxx 1231231fasfaf adassf4343 -124414141414214 +124114141241414只会检测 前部分转换 public static int strToInt(String str) { // 去除空格 str = str.trim(); int len = str.length(); // 空字符串去除 if(len == 0原创 2021-10-12 17:36:36 · 143 阅读 · 0 评论 -
棒球比赛:简单题三十八题JAVA
棒球比赛直接使用栈会很影响效率 public int calPoints(String[] ops) { Stack<Integer> stack = new Stack<>(); int ans = 0; for(String op:ops){ if(op.equals("+")){ int top = stack.pop(); i原创 2021-04-21 19:59:00 · 114 阅读 · 0 评论 -
判断句子是否为全字母句:简单题三十七题JAVA
判断句子是否为全字母句 public boolean checkIfPangram(String sentence) { boolean array [] = new boolean [26]; for(int i=0;i<sentence.length();i++){ array[sentence.charAt(i)-'a']=true; } for(int i=0;i<array.length;原创 2021-04-20 11:13:14 · 162 阅读 · 0 评论 -
数组元素积的符号 :简单题三十六题JAVA
数组元素积的符号 public int arraySign(int[] nums) { int answer = 1; for(int i = 0 ; i < nums.length ; i++){ if(nums[i] == 0){ answer = 0; break; } if(nums[i] < 0){原创 2021-04-20 10:38:21 · 135 阅读 · 0 评论 -
用队列实现栈:简单题三十五题JAVA
用队列实现栈public class T35 { //两个队列实现栈 一个负责压栈 出栈 Queue<Integer> queue1; Queue<Integer> queue2; /** Initialize your data structure here. */ public T35() { queue1 = new LinkedList(); queue2 = new LinkedList();原创 2021-04-13 17:55:57 · 85 阅读 · 1 评论 -
栈化为队:简单题三十四题JAVA
栈化为队题意是用两个栈去模拟一个队列栈是FILO 先进后出队列为FIFO先进先出要保证入队的时候,另一个的元素需要先进入stack1出队的时候,stack1的元素又要弹出压入stack2public class T34 { //stack1 压入 stack2 弹出 Stack<Integer> stack1; Stack<Integer> stack2; /** Initialize your data structure h原创 2021-04-13 15:39:16 · 69 阅读 · 0 评论 -
用两个栈实现队列:简单题三十三题JAVA
用两个栈实现队列class CQueue { Deque<Integer> stack1; Deque<Integer> stack2; public CQueue() { stack1 = new LinkedList<Integer>(); stack2 = new LinkedList<Integer>(); } public void appendTail(int v原创 2021-04-12 17:53:55 · 68 阅读 · 0 评论 -
删除字符串中的所有相邻重复项:简单题三十二题JAVA
删除字符串中的所有相邻重复项 public String removeDuplicates(String S) { char[] s = S.toCharArray(); //栈顶 top 索引 int top = -1; for (int i = 0; i < S.length(); i++) { //当栈顶为-1时 或 当前后2位字符不相等时 if (top == -1 ||原创 2021-04-12 17:21:34 · 95 阅读 · 0 评论 -
统计匹配检索规则的物品数量:简单题三十一题JAVA
统计匹配检索规则的物品数量 public int countMatches(List<List<String>> items, String ruleKey, String ruleValue) { //索引位置 int index=-1; //匹配数 int num = 0; if (ruleKey.equals("type")){ index = 0;原创 2021-04-09 18:12:13 · 92 阅读 · 0 评论 -
猜数字:简单题三十题JAVA
猜数字 public static int game(int[] guess, int[] answer) { int num = 0; for (int i=0;i<guess.length;i++){ if (guess[i]==answer[i]){ num++; } } return num; }原创 2021-04-09 17:35:12 · 152 阅读 · 0 评论 -
x 的平方根:简单题二十八题JAVA
x 的平方根袖珍计算器算法 public int mySqrt1(int x) { if(x == 0) return 0; int ans = (int)Math.exp(0.5*Math.log(x)); return (long)(ans+1)*(ans+1)<= x ? ans+1 :ans; }原创 2021-04-09 14:18:24 · 114 阅读 · 0 评论 -
爬楼梯:简单题二十九题JAVA
爬楼梯分析爬一阶 1爬二阶 2爬三阶 3爬四阶 5爬五阶 8T(n)= T(n-1)+T(n-2)解法1递归递归的确是一个很棒的解法,但是只考虑算法的精妙,而忘记了实际应用的问题,就本末倒置了。时间复杂度为O(2^n) 空间复杂度为O(n) public static int climbStairs(int n) { if (n==1||n==2){ return n; } return cl原创 2021-04-09 13:43:34 · 102 阅读 · 0 评论 -
重新排列数组:简单题二十七题JAVA
重新排列数组题意说白了就是 让x1和y1 在一起,达到重新排列组合的目的。双指针法 public int[] shuffle(int[] nums, int n) { //1.首先准备一个新数组 int[] newNums = new int[nums.length]; //2.准备一个新数组的索引 int index = 0; //3.将旧数组看成2个子数组,并且同时进行 改变 for(int i=0 ; i<nums.length/2 ; i++){原创 2021-04-08 17:22:10 · 118 阅读 · 0 评论 -
设计停车系统:简单题二十六题JAVA
设计停车系统有一说一这个题有点脑瘫 private static int big; private static int medium; private static int small; public T26(int big, int medium, int small) { this.big = big; this.medium = medium; this.small = small; } //进原创 2021-04-08 16:10:39 · 148 阅读 · 0 评论 -
拥有最多糖果的孩子:简单题二十五题JAVA
拥有最多糖果的孩子解法1 枚举 public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) { List<Boolean> list = new ArrayList<>(); int max = 0; for(int i=0;i<candies.length;i++){ if(candies[i]>m原创 2021-01-17 18:31:33 · 156 阅读 · 0 评论 -
宝石与石头:简单题二十四题JAVA
宝石与石头解法1 暴力 public int numJewelsInStones(String jewels, String stones) { int sum = 0; for(int i=0;i<jewels.length();i++){ char i1 = jewels.charAt(i); for(int j=0;j<stones.length();j++){ char j1 = ston原创 2021-01-17 18:07:26 · 111 阅读 · 0 评论 -
好数对的数目:简单题二十三题JAVA
好数对的数目给你一个整数数组 nums 。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。解法1,暴力 public int numIdenticalPairs(int[] nums) { int sum = 0; for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.lengt原创 2021-01-17 17:31:37 · 138 阅读 · 0 评论 -
删除中间节点:简单题二十二题JAVA
删除中间节点题本身没难度,但是读题 还是挺难理解的/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public void deleteNode(ListNode node) { node.va原创 2021-01-15 16:26:04 · 81 阅读 · 0 评论 -
左旋转字符串:简单题二十一题JAVA
左旋转字符串题目描述解法1 public String reverseLeftWords(String s, int n) { return s.substring(n).concat(s.substring(0, n)); }原创 2021-01-15 16:17:42 · 72 阅读 · 0 评论 -
一维数组的动态和:简单题二十题JAVA
一维数组的动态和解法一 暴力无脑 不推荐 public int[] runningSum(int[] nums) { int sum = 0; for(int i=nums.length-1;i>0;i--){ for (int j = i; j >= 0; j--) { sum = sum + nums[j]; } nums[i] = sum; sum = 0; }原创 2021-01-15 15:41:31 · 237 阅读 · 0 评论 -
最富有客户的资产总量:简单题十九题JAVA
最富有客户的资产总量题目描述解法1 我自己做的 (暴力就完事)public int maximumWealth(int[][] accounts) { int max = 0; int l = 0; for(int i=0;i<accounts.length;i++){ for(int j=0;j<accounts[i].length;j++){ l = accounts[i][j]原创 2021-01-15 15:24:27 · 91 阅读 · 0 评论 -
加一:简单题十八题
加一提示:1 <= digits.length <= 1000 <= digits[i] <= 9public int[] plusOne(int[] digits) { //首先 如果不进位 返回一种遍历 for(int i=digits.length-1;i<=0;i--){ if(digits[i]==9){ digits[i]=0; }else{ digits[i] += 1; return digits; } } /原创 2020-12-12 18:29:21 · 59 阅读 · 0 评论 -
最后一个单词的长度:双指针法:简单题十七题
最后一个单词的长度 public static int lengthOfLastWord(String s) { //获取 字符串最后一位索引 int end = s.length()-1; //找出非' '的哪一位 while(end>=0 && s.charAt(end)==' ') end--; if(end<0) return 0; int start = end ; while(start>=0 && s.c原创 2020-12-12 17:57:51 · 93 阅读 · 0 评论 -
最大子序和:动态规划:简单题第十六题
最大子序和贪心算法public static int maxSubArray(int[] nums) { int pre = 0; int max = nums[0]; for(int i : nums){ if(pre>0) pre = pre + i; else pre = i; max = Math.max(max,pre); } return max;原创 2020-12-12 17:19:09 · 80 阅读 · 0 评论 -
外观数列:双指针法:简单题第十五题
外观数列如果使用双指针也就是说明将数据合并public String countAndSay(int n) { // 递归终止条件 if (n == 1) { return "1"; } StringBuffer res = new StringBuffer(); // 拿到上一层的字符串 String str = countAndSay(n - 1); int原创 2020-11-29 17:38:25 · 103 阅读 · 0 评论 -
搜索插入位置:双指针法:简单题第十四题
搜索插入位置我使用的是一个双指针感觉和他标准答案不一样 但是更简单public int searchInsert(int[] nums, int target) { int i = 0; for(int j=0;j<nums.length;j++){ if(nums[j]<target){ i++; }else if(nums[j]==target){原创 2020-11-28 21:12:42 · 102 阅读 · 0 评论 -
双指针:简单题第十三题移动元素
移动元素public int removeElement(int[] nums, int val) { int i = 0; for (int j = 0; j < nums.length; j++) { if (nums[j] != val) { nums[i] = nums[j]; i++; } } return i;}原创 2020-11-28 20:51:27 · 94 阅读 · 0 评论 -
模拟法:简单题第十二题二进制求和
二进制求和public static String addBinary(String a, String b) { return Integer.toBinaryString(Integer.parseInt(a,2)+Integer.parseInt(b,2));}为了适用于长度较大的字符串计算,我们应该使用更加健壮的算法。模拟法public static String addBi(String a, String b) { int carry = 0; StringBuilde原创 2020-11-24 12:16:24 · 145 阅读 · 0 评论 -
双指针法:简单题第十一题实现 strStr()
C语言中的strStr() 等同于 java中的indexOf()利用String方法 int L = needle.length(), n = haystack.length(); for (int start = 0; start < n - L + 1; ++start) { if (haystack.substring(start, start + L).equals(needle)) { return start; } }原创 2020-11-23 19:00:04 · 116 阅读 · 0 评论 -
简单题第十题1比特与2比特字符
1比特与2比特字符示例 1:输入: bits = [1, 0, 0]输出: True示例 2:输入: bits = [1, 1, 1, 0]输出: Falsepublic static boolean isOneBitCharacter(int[] bits) { int i = 0; //防止 越界 whlie(i<bits.length-1){ //如果 是0就跳过一步 if(bits[i]==原创 2020-11-23 10:12:19 · 152 阅读 · 0 评论 -
简单题第九题移动零
移动零双指针法 public static void moveZeroes(int[] nums) throws Exception { int n = nums.length, left = 0, right = 0; while (right<n) { if (nums[right]!=0) { swap(nums, left, right); left++; } right++; } } public static void swap原创 2020-11-19 18:36:29 · 97 阅读 · 0 评论 -
简单题第八题删除排序数组中的重复项
删除排序数组中的重复项双指针删除重复项双指针法,首先我写了2中解法一种是利用set去重,只能获取数组中的值个数。 不能原地修改数组所以正确做法应该是双指针public class T8 { public static int getI(int[] arr) { Set<Integer> integers =new HashSet<Integer>(); for (int i = 0; i < arr.length; i++) { integers原创 2020-11-18 20:33:00 · 137 阅读 · 1 评论 -
简单题第七题合并两个有序链表
合并两个有序链表提前给你一个写好的链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; thi原创 2020-11-18 12:54:15 · 156 阅读 · 0 评论 -
简单题第六题有效的括号
简单题第六题有效的括号有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。public class A{ public boolean isValid(String s){ int n = s.length(); if(n%2==1){ return false; } Map<Character,Character> map = new HashMap<>(){{; put(")","("); put("}"原创 2020-11-17 21:27:51 · 112 阅读 · 0 评论 -
简单题第五题最长公共前缀
最长公共前缀我的正常思路方法一:横向扫描public static String longestCommonPrefix(String[] strs) { //判断传入字符数组是不是空 if(strs==null||strs.length==0){ return ""; } //先把第一位拿出来,准备比较 String pre = strs[0]; //还得两两比较的次数拿出来 int ci = strs.length; for(int i=1;i<ci原创 2020-11-17 11:47:09 · 121 阅读 · 0 评论 -
简单题第四题罗马数字转整数
罗马数字转整数方法一,但是这种方法等于投机取巧不是正解要看还是得看方法二class Solution { // 首先将罗马数字放入map, //I 1 //IV 4 //V 5 //IX 9 //X 10 //XL 40 //L 50 //XC 90 //C 100 //CD 400 //D 500 //CM 900 //M 1000 public int romanToInt1(String s) { Map<String,Integer&原创 2020-11-16 23:28:07 · 89 阅读 · 0 评论