力扣题目训练(7)

2024年1月31日力扣题目训练

2024年1月31日第七天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。前几天家里有事加上有一个作业所以没办法只能拖到今天,今天能写也是利用了作业数据下载的时间,但是我不会放弃的我会认真完成的。

387. 字符串中的第一个唯一字符

链接: 唯一字符
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
找唯一就是计数,我采用的是哈希表。
代码:

class Solution {
   
public:
    int firstUniqChar(string s) {
   
        unordered_map<char,int> res;
        for(char ch: s){
   
            res[ch]++;
        }
        for(int i = 0; i < s.size(); i++){
   
            if(res[s[i]] == 1){
   
                return i;
            }
        }
        return -1;
    }
};

389. 找不同

链接: 找不同
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
找出添加的字母,也就是计数看哪个多了,所以我采用了哈希表。
代码:

class Solution {
   
public:
    char findTheDifference(string s, string t) {
   
        unordered_map<char,int>res;
        char ans;
        for(int i = 0; i < s.size(); i++){
   
            res[s[i]]++;
        }
        for(int i = 0; i < t.size(); i++){
   
            if(res[t[i]] == 0){
   
                ans = t[i];
            } 
            else res[t[i]]--;
        }
        return ans;
    }
};

401. 二进制手表

链接: 二进制手表
难度: 简单
题目:
题目描述
在这里插入图片描述
在这里插入图片描述

运行示例:
运行示例

思路:
这道题本质就是看二进制中总共有多少个1,所以利用位运算取最高4位和低6位然后计算。
代码:

class Solution {
   
public:
    vector<string> readBinaryWatch(int turnedOn) {
   
        vector<string> ans;
        if(turnedOn >= 9) return ans;
        for(int i = 0; i < 1024; i++){
   
            int h = i >>6;
            int m  = i & 63;
            if(h < 12 && m < 60 && __builtin_popcount(i) == turnedOn){
   
                ans.push_back(to_string(h)+":"+(m<10?"0":"")+to_string(m));
            }
        }
        return ans;
    }
};

109. 有序链表转换二叉搜索树

链接: 二叉搜索树
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
对于二叉搜索树,如果对其进行中序遍历,得到的值序列是递增有序的。此外左右子树高度差不超过1,利用这两条性质通过分治和中序遍历完成这道题。
代码:

class Solution {
   
public:
    int getLength(ListNode* head){
   
        int count = 0;
        while(head!=NULL){
   
            count++;
            head = head->next;
        }
        return count;
    }
    TreeNode* buildTree(ListNode* &head,int left,int right){
   
        if(left > right) return NULL;
        int mid = (left+right+1)/2;
        TreeNode* root = new TreeNode();
        root->left = buildTree(head, left, mid-1);
        root->val =  head->val;
        head = head->next;
        root->right = buildTree(head,mid+1,right);
        return root;
    }
    TreeNode* sortedListToBST(ListNode* head) {
   
        int length = getLength(head);
        return buildTree(head,0,length-1);
    }
};

114. 二叉树展开为链表

链接: 展开为链表
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
二叉树前序遍历的顺序为:根左右。
这个结果也是前序遍历的结果,所以可以利用前序遍历解决。
代码:

class Solution {
   
public:
    void preorder(TreeNode*root,vector<TreeNode*> &res){
   
        if(root != NULL){
   
            res.push_back(root);
            preorder(root->left,res);
            preorder(root->right,res);
        }
        
    }
    void flatten(TreeNode* root) {
   
        vector<TreeNode*> res;
        preorder(root,res);
        for(int i = 1 ; i < res.size(); i++){
   
            TreeNode*pre = res[i-1];
            TreeNode*curr = res[i];
            pre->left = NULL;
            pre->right = curr;
            
        }
    }
};

52. N 皇后 II

链接: N 皇后
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
这与上次的51.N皇后类似,只是输出一个是解决,一个是总数。利用的是回溯法。
代码:

class Solution {
   
private:
    int res = 0;
public:
    bool isValid(vector<string>& board,int row, int col){
   
        int n = board.size();
        for(int i = 0; i < n; i++){
   
            if(board[i][col] == 'Q') return false;
        }
        for (int a = row, b = col; a >= 0 && b >= 0; a--, b--) {
    // 左上
            if (board[a][b] == 'Q') return false;
        }
        for (int a = row, b = col; a >= 0 && b < n; a--, b++) {
    // 右上
            if (board[a][b] == 'Q') return false;
        }
        return true;
    }
    void backtrack(vector<string>&board,int row,int n){
   
        if(row == n) 
        {
   
            res++;
            return;
        }
        for(int i = 0; i < n; i++){
   
            if(isValid(board,row,i)){
   
                board[row][i] = 'Q';
                backtrack(board,row+1,n);
                board[row][i] = '.';
            }
        }
    }
    int totalNQueens(int n) {
   
        vector<string> board(n, string(n, '.'));
        backtrack(board, 0,n);
        return res;
    }
};

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-07 21:46:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-07 21:46:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-07 21:46:03       82 阅读
  4. Python语言-面向对象

    2024-02-07 21:46:03       91 阅读

热门阅读

  1. LabVIEW高精度主动模拟肺系统的开发与应用

    2024-02-07 21:46:03       55 阅读
  2. c++ system解释

    2024-02-07 21:46:03       52 阅读
  3. 安装flash-attention失败的终极解决方案

    2024-02-07 21:46:03       48 阅读
  4. Docker面试题2024

    2024-02-07 21:46:03       41 阅读
  5. SpringBoot整合Quartz

    2024-02-07 21:46:03       51 阅读
  6. 进程基础(命令的基石)

    2024-02-07 21:46:03       37 阅读