class CQueue:
def __init__(self):
self.stack_a = []
self.stack_b = []
def appendTail(self, value: int) -> None:
self.stack_a.append(value)
def deleteHead(self) -> int:
if self.stack_b:
return self.stack_b.pop()
else:
while self.stack_a:
self.stack_b.append(self.stack_a.pop())
if self.stack_b:
return self.stack_b.pop()
else:
return -1
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
for i in range(len(nums)):
while nums[i]!=i:
if nums[nums[i]]!=nums[i]:
tmp = nums[nums[i]]
nums[nums[i]] = nums[i]
nums[i] = tmp
else:
return nums[i]
快速排序
def partition(arr, l, r):
val = arr[l]
while l < r:
while l < r and arr[r] >= val:
r -= 1
if l < r:
arr[l] = arr[r]
while l < r and arr[l] <= val:
l += 1
if l < r:
arr[r] = arr[l]
arr[l] = val
return l
def qsort(arr, l, r):
if r <= l:
return
mid = partition(arr, l, r)
qsort(arr, l, mid - 1)
qsort(arr, mid + 1, r)
if __name__ == '__main__':
arr = [3, 2, 41, 4]
qsort(arr, 0, len(arr)-1)
print(arr)
两数之和
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] indexs = new int[2];
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
indexs[0]=i;
indexs[1] = map.get(nums[i]);
return indexs;
}
map.put(target-nums[i],i);
}
return indexs;
}
}
整数反转
class Solution {
public int reverse(int x) {
int res = 0;
while(x>0){
int a = x %10;
x = x/10;
res = res * 10 + a;
}
return (int)res==res? (int)res:0;
}
}
回文数
class Solution {
public:
bool isPalindrome(int x) {
// 特殊情况:
// 如上所述,当 x < 0 时,x 不是回文数。
// 同样地,如果数字的最后一位是 0,为了使该数字为回文,
// 则其第一位数字也应该是 0
// 只有 0 满足这一属性
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
// 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
return x == revertedNumber || x == revertedNumber / 10;
}
};
最长公共前缀
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String prefix = strs[0];
int count = strs.length;
for (int i = 1; i < count; i++) {
prefix = longestCommonPrefix(prefix, strs[i]);
if (prefix.length() == 0) {
break;
}
}
return prefix;
}
public String longestCommonPrefix(String str1, String str2) {
int length = Math.min(str1.length(), str2.length());
int index = 0;
while (index < length && str1.charAt(index) == str2.charAt(index)) {
index++;
}
return str1.substring(0, index);
}
}
def findRepeatNumber(self, nums: List[int]) -> int:
hashmap = set()
for num in nums:
if num in hashmap:
return num
else:
hashmap.add(num)
return -1
def maxDepth(self, root: TreeNode) -> int:
def dfs(root):
if not root:return 0
left = dfs(root.left)
right = dfs(root.right)
return max(left,right) + 1
return dfs(root)
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
p, q = headA, headB
while not p == q:
p = p.next if p else headB
q = q.next if q else headA
return p
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
s = set()
p, q = headA, headB
while p:
s.add(p)
p = p.next
while q:
if q in s:
return q
q = q.next
return None
def twoSum(self, nums: List[int], target: int) -> List[int]:
startPoint = 0
endPoint = len(nums) - 1
while startPoint < endPoint:
s = nums[startPoint] + nums[endPoint]
if s > target:
endPoint -= 1
elif s <target:
startPoint += 1
elif s == target:
return [nums[startPoint], nums[endPoint]]
def reverseWords(self, s: str) -> str:
s = s.strip()
s = s.split()
s = s[::-1]
return ' '.join(s)
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root:
return
root.left, root.right = root.right, root.left
self.mirrorTree(root.left)
self.mirrorTree(root.right)
return root
class MinStack:
def __init__(self):
self.stack = []
def push(self, x: int) -> None:
if not self.stack:
self.stack.append((x,x))
else:
min_num = self.min()
if x <= self.min():
self.stack.append((x,x))
else:
self.stack.append((x,min_num))
def pop(self) -> None:
self.stack.pop(-1)
def top(self) -> int:
return self.stack[-1][0]
def min(self) -> int:
return self.stack[-1][1]
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.min()
def exchange(self, nums: List[int]) -> List[int]:
i, j = 0, len(nums) - 1
while i < j:
while i < j and nums[i] & 1 == 1: i += 1
while i < j and nums[j] & 1 == 0: j -= 1
nums[i], nums[j] = nums[j], nums[i]
return nums
网友评论