算法_leetcode-字节跳动

1、两数之和

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        for(int i=0; i

2、反转一个单链表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
 
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        struct ListNode *newHead = NULL;
        struct ListNode *node;
        while (head != NULL) {
            //1. 对之前的链表做头删
            node = head;
            head = head->next;
            
            //2. 对新链表做头插
            node->next = newHead;
            newHead = node;
        }
        return newHead;
    }
};

3、合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        struct ListNode *head= new ListNode(-1);
        struct ListNode *newNode = head;
        while(l1 != NULL&&l2 != NULL){
            if(l1->val<=l2->val){
            newNode->next=l1;
            l1=l1->next;
            }else{
            newNode->next=l2;
            l2=l2->next;
            }
            newNode = newNode->next;
        }
        
        newNode->next = l1== NULL? l2:l1;
        
        return head->next;
    }
};

4、【LeetCode191题】编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res=0;
        while(n>0)
        {
            res++;
            n=n&(n-1);
        }
        return res;
    }
};

利用位运算解LeetCode191题:位1的个数

5、【leetcode 1415】长度为n的开心字符串中字典序第k个的字符串(回溯)

class Solution {
public:
    string s,res;
    int cnt=0;
    string getHappyString(int n, int k) {
        dfs(n,k);
        return cnt==k?res:"";
    }

    void dfs(int n, int k){
        if(cnt==k)
            return;
        if(s.size()==n){
            res=s;
            cnt++;
            return;
        }   
        for(char q='a';q<='c';q++){
            if(s.size()&&s.back()==q) continue;
            
            s.push_back(q);
            dfs(n,k);
            s.pop_back();
        }
    }
};

长度为n的开心字符串中字典序第k小的字符串(回溯)

你可能感兴趣的:(算法_leetcode-字节跳动)