算法_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; } };

【算法_leetcode-字节跳动】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小的字符串(回溯)

    推荐阅读