美文网首页
算法_leetcode-字节跳动

算法_leetcode-字节跳动

作者: Hengry | 来源:发表于2020-10-25 00:02 被阅读0次

    1、两数之和

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            for(int i=0; i<nums.size(); i++)
            {
                for(int j=i+1; j<nums.size(); j++)
                {
                    if(nums[i] + nums[j] == target)
                        return {i,j};
                }
            }
            return {};
        }
    };
    

    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-字节跳动

          本文链接:https://www.haomeiwen.com/subject/pokgmktx.html