力扣刷题笔记

简单题

搜索插入位置

time: 2023/10/13简单题

题目

image.png

我的解题

class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0;
        int right = nums.length-1;
        int mid = 0;

        while (right >= left){
            mid = (left + right) / 2;
            if (left == right && nums[mid] != target) {
                if (nums[mid] > target) return left;
                else return left+1;
            }
            else {
                if (nums[mid] == target) return mid;
                else if (nums[mid] > target) right = mid;
                else left = mid+1;
            }
        }
        return right;
    }
}

结果

image.png


最后一个单词的长度

time: 2023/10/13简单题

题目

image.png

解答

class Solution {
    public int lengthOfLastWord(String s) {
        String[] ret =  s.split(" ");
        return ret[ret.length-1].length();
    }
}

结果

image.png


加一

time: 2023/10/13简单题

题目

image.png

我的解答1:

class Solution {
    public int[] plusOne(int[] digits) {
        int num = 0;
        int count = 0;
        int demo = 0;
        int[] ret;

        for (int e : digits) num = num * 10 + e;
        demo = ++num;
        while (demo > 0) {
            demo /= 10;
            count++;
        }
        ret = new int[count];
        for (int i = count-1; i >= 0 ; i--){
            ret[i] = num % 10;
            num /= 10;
        }
        return ret;
    }
}

错误原因: int只有10位数,这里最多有100位,所以不能转为int.
image.png

我的解答2:

class Solution {
    public int[] plusOne(int[] digits) {
        int flag = 0;
        int[] ret; 
        boolean carry = false;

        for (int i = 0; i < digits.length; i++) 
            if (digits[i] != 9){
                flag = 1;
                break;
            }

        if (flag == 0) ret = new int[digits.length + 1];
        else ret = new int[digits.length];

        ret[ret.length-1] = digits[digits.length -1] + 1;
        if (ret[ret.length-1] == 10){
            ret[ret.length-1] = 0;
            carry = true;
        }
        for (int i = digits.length - 2; i >= 0; i--){
            if (carry){
                int demo = digits[i] + 1;
                if (demo == 10) ret[i] = 0;
                else {
                    ret[i] = demo;
                    carry = false;
                    }
            }else{
                for (int j = i; j >= 0; j--) ret[j] = digits[j];
            }
        }
        if (ret.length != digits.length && carry == true) ret[0] = 1;
        return ret;
    }
}

结果:

image.png


9. 回文数

time: 2023/10/16简单题

题目

image.png

我的解答

class Solution {
    public boolean isPalindrome(int x) {
        int demo = x;
        int n = 0;
        if (x < 0) return false;
        else{
            while (demo > 0){
                n = n * 10 + demo % 10;
                demo/=10;
            }
            return n == x;
        }
    }
}

结果

image.png


13. 罗马数字转整数

题目

time: 2023/10/16简单题
image.png

我的解答

class Solution {
    public int romanToInt(String s) {
        int count = 0;
        Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);

        for (int i = 0; i < s.length(); i++){
            if (i+1 < s.length() && map.get(s.charAt(i)) < map.get(s.charAt(i+1))){
                count += map.get(s.charAt(i+1))-map.get(s.charAt(i));
                i++;
            }else{
                count += map.get(s.charAt(i));
            }
        }
        return count;
    }
}

结果

image.png

刷题小tips 中第一条优化一下,使用switch替换

我的解答二:

class Solution {
    public int romanToInt(String s) {
        int count = 0;

        for (int i = 0; i < s.length(); i++){
            if (i+1 < s.length() && getValue(s.charAt(i)) < getValue(s.charAt(i+1))){
                count += getValue(s.charAt(i+1))-getValue(s.charAt(i));
                i++;
            }else{
                count += getValue(s.charAt(i));
            }
        }
        return count;
    }
     private int getValue(char ch) {
        switch(ch) {
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            default: return 0;
        }
    }
}

结果

image.png


14. 最长公共前缀

题目

time: 2023/10/16简单题
image.png

我的解答

class Solution {
    public String longestCommonPrefix(String[] strs) {
        int length = 200;
        int i;

        for (String s : strs)
            length = Math.min(s.length(), length);

        for (i = 0; i < length; i++){
            boolean flag = true;
            char c = strs[0].charAt(i);
            for (String s : strs){
                if (s.charAt(i) != c) {
                    flag = false;
                    break;
                }
            }
            if (!flag){break;}
        }
        return strs[0].substring(0, i);
    }
}

结果

image.png


20. 有效的括号

题目

time: 2023/10/16简单题
image.png

我的解答

class Solution {
    public int demo(char e){
        switch(e){
            case '(': return 1;
            case ')': return 4;
            case '{': return 2;
            case '}': return 5;
            case '[': return 3;
            case ']': return 6;
        }
        return 0;
    }
    public boolean isValid(String s) {
        char[] c = s.toCharArray();
        if (c.length % 2 == 1) return false;
        else{
            Deque<Integer> stack = new ArrayDeque<>();

        for (char e : c){
            if (demo(e) <= 3) stack.push(demo(e));
            else{
                if (stack.isEmpty()) return false;
                else{
                    int i = stack.pop();
                    if (demo(e) - i != 3) {
                    return false;
                }
                }
            }
        }
        
        return stack.isEmpty();
        }
    }
    
}

结果

image.png

21. 合并两个有序链表

题目

time: 2023/10/16简单题
image.png

我的解答

/**
 * 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; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode list = new ListNode(-1);
        ListNode ret = list;
        
        while(list1 != null && list2 != null){
            if (list1.val <= list2.val){
            ret.next = list1;
            list1 = list1.next;
            }else{
            ret.next = list2;
            list2 = list2.next;
            }
            ret = ret.next;
        }
        ret.next = list1 == null ? list2 : list1;
        return list.next;
    }
}

结果

image.png

136. 只出现一次的数字

time: 2023/10/14简单题

题目

image.png

我的解答1:

class Solution {
    public int singleNumber(int[] nums) {
        int ret = 0;
        Arrays.sort(nums);

        for (int i = 0; i < nums.length; i+=2){
            if (i + 1 < nums.length){
                if (nums[i+1] != nums[i]) {
                    ret = nums[i];
                    break;
                    }
            }else{
                ret = nums[i];
                break;
            }
        }
        return ret;
    }
}

结果

image.png

我的解答二:(位运算)

class Solution {
    public int singleNumber(int[] nums) {
        int ret = 0;

        for (int e : nums) ret = ret ^ e;
        return ret;
    }
}

结果

image.png

2652. 倍数求和

题目

time: 2023/10/17简单题
image.png

我的解答一(打表法):

class Solution {
    public int sumOfMultiples(int n) {
        int[] nums = {3,5,6,7,9,10,12,14,15,18,20,21,24,25,27,28,30,33,35,36,39,40,42,45,48,49,50,51,54,55,56,57,60,63,65,66,69,70,72,75,77,78,80,81,84,85,87,90,91,93,95,96,98,99,100,102,105,108,110,111,112,114,115,117,119,120,123,125,126,129,130,132,133,135,138,140,141,144,145,147,150,153,154,155,156,159,160,161,162,165,168,170,171,174,175,177,180,182,183,185,186,189,190,192,195,196,198,200,201,203,204,205,207,210,213,215,216,217,219,220,222,224,225,228,230,231,234,235,237,238,240,243,245,246,249,250,252,255,258,259,260,261,264,265,266,267,270,273,275,276,279,280,282,285,287,288,290,291,294,295,297,300,301,303,305,306,308,309,310,312,315,318,320,321,322,324,325,327,329,330,333,335,336,339,340,342,343,345,348,350,351,354,355,357,360,363,364,365,366,369,370,371,372,375,378,380,381,384,385,387,390,392,393,395,396,399,400,402,405,406,408,410,411,413,414,415,417,420,423,425,426,427,429,430,432,434,435,438,440,441,444,445,447,448,450,453,455,456,459,460,462,465,468,469,470,471,474,475,476,477,480,483,485,486,489,490,492,495,497,498,500,501,504,505,507,510,511,513,515,516,518,519,520,522,525,528,530,531,532,534,535,537,539,540,543,545,546,549,550,552,553,555,558,560,561,564,565,567,570,573,574,575,576,579,580,581,582,585,588,590,591,594,595,597,600,602,603,605,606,609,610,612,615,616,618,620,621,623,624,625,627,630,633,635,636,637,639,640,642,644,645,648,650,651,654,655,657,658,660,663,665,666,669,670,672,675,678,679,680,681,684,685,686,687,690,693,695,696,699,700,702,705,707,708,710,711,714,715,717,720,721,723,725,726,728,729,730,732,735,738,740,741,742,744,745,747,749,750,753,755,756,759,760,762,763,765,768,770,771,774,775,777,780,783,784,785,786,789,790,791,792,795,798,800,801,804,805,807,810,812,813,815,816,819,820,822,825,826,828,830,831,833,834,835,837,840,843,845,846,847,849,850,852,854,855,858,860,861,864,865,867,868,870,873,875,876,879,880,882,885,888,889,890,891,894,895,896,897,900,903,905,906,909,910,912,915,917,918,920,921,924,925,927,930,931,933,935,936,938,939,940,942,945,948,950,951,952,954,955,957,959,960,963,965,966,969,970,972,973,975,978,980,981,984,985,987,990,993,994,995,996,999,1000};
        int count = 0;

        for (int e : nums){
            if (e <= n) count+=e;
            else break;
        }

        return count;
    }
}

结果

image.png

我的解答二(不打表):

class Solution {
    public int sumOfMultiples(int n) {
        int count = 0;
        for (int i = 3; i <= n; i++){
            if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0) count+=i;
        }
        return count;
    }
}

结果二:

image.png

我的解答三(使用公式):

class Solution {
    public int sumOfMultiples(int n) {
        return count(n, 3) + count(n, 5) + count(n, 7) - count(n, 15) - count(n, 21) - count(n, 35) + count(n, 105);
    }
    public int count(int n, int m){
        return n/m*(n/m+1)/2*m;
    }
}

结果

image.png

67. 二进制求和

题目

time: 2023/10/18简单题
image.png

我的解答

class Solution {
    public String addBinary(String a, String b) {
        if (a.length() < b.length()){
            String demo = a;
            a = b;
            b = demo;
        }
        int flag = 0;
        String ret = "";

        for (int i = 1; i <= a.length(); i++){
            int demo = 0;
            if (i <= b.length()){
                demo = (a.charAt(a.length()-i)-'0') + (b.charAt(b.length()-i)-'0') + flag;
                ret = (demo == 1 || demo == 3) ? "1".concat(ret) : "0".concat(ret);
                flag = demo > 1 ? 1 : 0;
            }else{
                if (flag == 1) {
                    demo =  (a.charAt(a.length()-i)-'0') + flag;
                    ret = (demo == 1) ? "1".concat(ret) : "0".concat(ret);
                    flag = demo == 2 ? 1:0;
                }else {
                    ret = a.substring(0, a.length()-i+1).concat(ret);
                    break;
                }
            }
        }
        if (flag == 1) ret = "1".concat(ret);
        return ret;
    }
}

结果

image.png

69. x 的平方根

使用二分法!

题目

time: 2023/10/18简单题
image.png

我的解答

class Solution {
    public int mySqrt(int x) {
        long left = 1;
        long right = x;
        long mid = 0;
        if (x == 0) return 0;
        else{
            while(left + 1 < right){
                mid = (right+left)/2;
                if (mid * mid > x) right = (int) mid;
                else if (mid * mid < x) left = (int) mid;
                else return (int) mid;
            }

            return (int)left;
        }
    }
}

结果

image.png

70. 爬楼梯

题目

time: 2023/10/18简单题
image.png

我的解答1(打表法):

class Solution {
    public int climbStairs(int n) {
        int[] nums = {1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170,1836311903};
        return nums[n-1];
    }
}

结果

image.png

我的解答2(动态规划):

class Solution {
    public int climbStairs(int n) {
        if (n == 1) return 1;
        else if (n == 2) return 2;
        else {
            int a = 1;
            int b = 2;
            for (int i = 3; i <= n; i++){
                int c = a+b;
                a = b;
                b = c;
            }
            return b;
        }
    }
}

结果

image.png

2525. 根据规则将箱子分类

题目

time: 2023/10/20简单题
image.png
image.png

我的解答

class Solution {
    public String categorizeBox(int length, int width, int height, int mass) {
        boolean a = false;
        boolean b = false;

        if (length / 10000 >= 1 || width / 10000 >= 1 || height / 10000 >= 1 || (long) length * width * height / 1000000000L >= 1) a = true;
        b = mass >= 100;

        if (a && b) return "Both";
        else if (!a && !b) return "Neither";
        else if (a && !b) return "Bulky";
        else return "Heavy";
    }
}

Tips:

int10位数左右,所以注意后面3位乘3位乘3位应该转为Long, 然后 注意常量如果为long型,后面加一个L

结果

image.png

83. 删除排序链表中的重复元素

题目

time: 2023/10/20简单题
image.png

我的解答

/**
 * 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; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode cur = head;
        // 数据可能为0 所以需要判断该结点为空的情况
        while (cur != null && cur.next != null){
            if (cur.val == cur.next.val){
                cur.next = cur.next.next;
            }else cur = cur.next;
        }
        return head;
    }
}

结果

image.png

88. 合并两个有序数组

题目

time: 2023/10/20简单题
image.png
image.png

我的解答

class Solution {
   public void merge(int[] nums1, int m, int[] nums2, int n) {
        if (n != 0) {
            int length = m+n;
            for (int i = length-1; i >= 0 && n > 0; i--){
                if (m > 0){
                    if (nums1[m-1] > nums2[n-1]) {
                        nums1[i] = nums1[m-1];
                        m--;
                    }else{
                        nums1[i] = nums2[n-1];
                        n--;
                    }
                }else{
                    nums1[i] = nums2[n-1];
                    n--;
                }
            }
        }
    }
}

结果

image.png

Tips:

这道题如果从前面往后面排序有点麻烦,但是从后面往前面反而更简单

94. 二叉树的中序遍历

题目

time: 2023/10/20简单题
image.png

我的解答(迭代):

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Deque<TreeNode> stk = new LinkedList<>();
        while (root != null || !stk.isEmpty()){
            while (root != null){
                stk.push(root);
                root = root.left;
            }
            root = stk.pop();
            list.add(root.val);
            root = root.right;
        }
        return list;
    }
}

我的答案二(递归):

结果

image.png

2678. 老人的数目

题目

time: 2023/10/23简单题
image.png

我的解答

class Solution {
    public int countSeniors(String[] details) {
        int ret = 0;
        for (String s : details){
            int demo = (s.charAt(11)-'0') * 10 + (s.charAt(12)-'0');
            ret = ret + (demo > 60 ? 1 : 0);
        }

        return ret;
    }
}

结果

image.png

100. 相同的树

题目

time: 2023/10/25简单题
image.png
image.png

我的解答

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
     public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) return true;
        else if (p == null || q == null) return false;
        else {
            if (p.val == q.val) return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);

            else return false;
        }
    }
}

结果

image.png

101. 对称二叉树

题目

time: 2023/10/25简单题
image.png
image.png

我的解答 根据19题可以直接得到结果:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        TreeNode p = root.left;
        TreeNode q = root.right;
        return isSameTree(p, q);

    }
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) return true;
        else if (p == null || q == null) return false;
        else {
            if (p.val == q.val) return isSameTree(p.left, q.right) && isSameTree(p.right, q.left);
            else return false;
        }
    }
}

结果

image.png


中等题

260. 只出现一次的数字 III

time: 2023/10/26中等题

题目

image.png

我的解答

class Solution {
    public int[] singleNumber(int[] nums) {
        int ret = 0;
        for (int e : nums) ret ^= e;

        ret = ret & -ret;
        int[] num = new int[2];

        for (int e : nums)
            num[(e & ret) == 0 ? 0 : 1] ^= e;
        
        return num;
    }
}

结果

image.png

tips:

通过亦或的原理,将所有的值全部亦或可以得到两个数的亦或值,因为两个不同数亦或,一定有至少一位为1和0,所以根据这一位进行分类,生成两个数组,进而简化为有一个不同值 。

2530. 执行 K 次操作后的最大分数

题目

time: 2023/10/18中等题image.png

我的解答

class Solution {
    public long maxKelements(int[] nums, int k) {
        long ret = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);  

        for (int e : nums) pq.offer(e);

        for (int i = 0; i < k; i++){
            int x = pq.poll();
            ret += x;
            pq.offer(x/3+(x%3==0?0:1));
        }  
        return ret;
    }
}

结果

image.png

1726. 同积元组

题目

time: 2023/10/19中等题
image.png

我的解答

class Solution {
   public int tupleSameProduct(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int ret = 0;

        for (int i = 0; i < nums.length; i++){
            for (int j = i+1; j < nums.length; j++){
                int x = nums[i] * nums[j];
                if (map.containsKey(x)) {
                    map.put(x, map.get(x)+1);
                }else map.put(x, 1);
            }
        }

        for (int e : map.values()){
            ret += e*(e-1)/2;
        }
        return ret << 3;
    }
}

结果

image.png

小解析

本题通过hashmap的集合存储相同乘积的个数,然后通过公式计算组合数,这里使用了先拿出数据再增加。hashmap中有merge(key, value, BiFunction remappingFunction ) 所以可以这样写

class Solution {
   public int tupleSameProduct(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int ret = 0;

        for (int i = 0; i < nums.length; i++){
            for (int j = i+1; j < nums.length; j++){
                int x = nums[i] * nums[j];
                map.merge(x, 1, Integer::sum);
                // 在key为x的数值上面通过后面sum方法进行1;
            }
        }

        for (int e : map.values()){
            ret += e*(e-1)/2;
        }
        return ret << 3;
    }
}

🈲2316. 统计无向图中无法互相到达点对数

题目

time: 2023/10/21中等题
image.png
image.png

我的解答1(错误):

class Solution {
    public long countPairs(int n, int[][] edges) {
        HashMap<Integer, Integer> hm = new HashMap<>();
        for (int i = 0; i < n; i++) hm.put(i, -1);
        int count = -1;
        int total = 0;
        int before = 0;
        long ret = 0;

        int[] nums = new int[n];

        for (int[] e : edges){
            int a0 = hm.get(e[0]);
            int a1 = hm.get(e[1]);
            if (a0 == -1 && a1 == -1) {
                hm.replace(e[0], ++count);
                hm.replace(e[1], count);
                total+=2;
                nums[count]+=2;
            } else if (a0 != -1 && a1 == -1) {
                hm.replace(e[1], a0);
                nums[a0]++;
                total++;
            } else if (a0 == -1) {
                hm.replace(e[0], a1);
                nums[a1]++;
                total++;
            }

        }

        if (total < n){
            int length = n-total;
            for (int i = 0; i < length; i++){
                nums[++count] = 1;
                total++;
            }
        }


        for (int i = 0; i < count; i++){
            total -= nums[i];
            ret += (long) nums[i] * total;
            before += nums[i];
        }

        return ret;
    }
}

结果

image.png

原因

如果两组本来是分开的,因为后面一组比如[0, 5], [2, 4] 如果再来一组[0,2]这个程序不能进行改变每一个在[2, 4]组的值,所以不可取

别人解答:

class Solution {
    private List<Integer>[] g;
    private boolean[] vis;

    public long countPairs(int n, int[][] edges) {
        g = new List[n];
        vis = new boolean[n];
        Arrays.setAll(g, i -> new ArrayList<>());
        for (var e : edges) {
            int a = e[0], b = e[1];
            g[a].add(b);
            g[b].add(a);
        }
        long ans = 0, s = 0;
        for (int i = 0; i < n; ++i) {
            int t = dfs(i);
            ans += s * t;
            s += t;
        }
        return ans;
    }

    private int dfs(int i) {
        if (vis[i]) {
            return 0;
        }
        vis[i] = true;
        int cnt = 1;
        for (int j : g[i]) {
            cnt += dfs(j);
        }
        return cnt;
    }
}

结果

image.png

🈲1155. 掷骰子等于目标和的方法数

题目

time: 2023/10/24中等题
image.png

我的解答

class Solution {
    public int numRollsToTarget(int n, int k, int target) {
        if (target < n || target > n*k){
            return 0;
        }
        int[][] memo = new int[n + 1][target - n + 1];
        for (int[] m : memo)  Arrays.fill(m, -1); // -1 表示没有计算过


        return dfs(n, target-n, memo,k);
    }

    public int dfs(int i, int j, int[][] memo, int k){
        if (i == 0) return j == 0 ? 1:0;
        if (memo[i][j] != -1) { // 之前计算过
            return memo[i][j];
        }
        int res = 0;
        for (int x = 0; x < k && x <= j; x++) { // 掷出了 x
            res = (res + dfs(i - 1, j - x, memo, k)) % 1000000007;
        }
        return memo[i][j] = res; // 记忆化
    }
}

结果

image.png

🈲2698. 求一个整数的惩罚数

题目

time: 2023/10/25中等题
image.png
image.png

我的解答

class Solution {
    private boolean dfs(String str, int index, int target) {
        if (index == str.length()) {
            return target == 0;
        } 

        for (int i = index; i < str.length(); i++) {
            int curr = Integer.parseInt(str.substring(index, i + 1));
            // 减枝
            if (target - curr < 0) {
                break;
            }
            if (dfs(str, i + 1, target - curr)) {
                return true;
            }
        }
        return false;
    }
    public int punishmentNumber(int n) {
        int ret = 0;

        for (int i = 1; i <= n; i++){
            int t = i*i;
            if (dfs(t + "", 0, i)) {
                ret += t;
            }
        }
        
        return ret;
    }
}

结果

image.png


困难题

1402. 做菜顺序

题目

time: 2023/10/23困难题
image.png

我的解答

class Solution {
    public int maxSatisfaction(int[] satisfaction) {
        Arrays.sort(satisfaction);
        int max = 0;
        int count = 1;

        for (int i = 0; i < satisfaction.length; i++){
            int sum = 0;
            for (int j = 0; j < satisfaction.length - i; j++){
                sum += (j+1)*satisfaction[j+i];
            }
            max = Math.max(sum, max);
        }
        return max;
    }
}

结果

image.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Walking Dead833

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

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

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

打赏作者

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

抵扣说明:

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

余额充值