提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
前言
使用左閉右閉區(qū)間的二分查找時, 最后low一定是被查找元素的插入位置,若查找的數(shù)帶小數(shù),low-1, 便是最終結(jié)果
一、704. 二分查找
1、左閉右閉
文章來源:http://www.zghlxwxcb.cn/news/detail-657723.html
class Solution {
public int search(int[] nums, int target) {
int low = 0, high = nums.length-1, mid = 0;
while(low <= high){
mid = (low + high)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] < target){
low = mid + 1;
}else{
high = mid - 1;
}
}
return -1;
}
}
2、左閉右開
文章來源地址http://www.zghlxwxcb.cn/news/detail-657723.html
class Solution {
public int search(int[] nums, int target) {
int low = 0, high = nums.length, mid = 0;
while(low < high){
mid = (low + high)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] < target){
low = mid + 1;
}else{
high = mid;
}
}
return -1;
}
}
二、35. 搜索插入位置
class Solution {
public int searchInsert(int[] nums, int target) {
int low = 0, high = nums.length, mid;
while(low < high){
mid = (low + high)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] < target){
low = mid + 1;
}else{
high = mid;
}
}
return low;
}
}
三、34. 在排序數(shù)組中查找元素的第一個和最后一個位置
class Solution {
public int[] searchRange(int[] nums, int target) {
int low = 0, high = nums.length, mid; int[] res = {-1, -1};
while(low < high){
mid = (low + high)/2;
if(nums[mid] == target){
res[0] = res[1] = mid;
while(res[0]-1 >= 0 && nums[res[0] - 1] == target){
res[0] -= 1;
}
while(res[1] + 1 < nums.length && nums[res[1] + 1] == target){
res[1] += 1;
}
return res;
}else if(nums[mid] < target){
low = mid + 1;
}else{
high = mid;
}
}
return res;
}
}
四、69. x 的平方根
class Solution {
public int mySqrt(int x) {
int low = 0, high = x, mid;
if(x == 0 || x == 1){
return x;
}
while(low <= high){
mid = (low + high)/2;
if(x / mid == mid){
return mid;
}else if(x / mid > mid){
low = mid +1;
}else{
high = mid -1;
}
}
return low - 1;
}
}
五、367. 有效的完全平方數(shù)
lass Solution {
public boolean isPerfectSquare(int num) {
int x = 1;
while(num > 0){
num -= x;
x += 2;
}
return num == 0;
}
}
六、27. 移除元素
class Solution {
public int removeElement(int[] nums, int val) {
int i = 0, j = 0;
for(;i < nums.length; ){
if(nums[i] != val){
nums[j] = nums[i];
i ++; j ++;
}else{
i ++;
}
}
return j;
}
}
七、26. 刪除有序數(shù)組中的重復(fù)項(xiàng)
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 1){
return 1;
}
int i = 1, j = 0;
for(; i < nums.length; ){
if(nums[i] != nums[j]){
nums[++j] = nums[i++];
}else{
i ++;
}
}
return j + 1;
}
}
八、283. 移動零
class Solution {
public void moveZeroes(int[] nums) {
int i = 0, j = 0, len = nums.length;
if(len == 1)return;
while(i < len){
if(nums[i] != 0){
nums[j] = nums[i];
if(i == j){
i ++;
}else{
nums[i++] = 0;
}
j ++;
}else{
i ++;
}
}
}
}
九、844. 比較含退格的字符串
class Solution {
public boolean backspaceCompare(String s, String t) {
Deque<Character> deq1 = new ArrayDeque<>();
Deque<Character> deq2 = new ArrayDeque<>();
char[] ch1 = s.toCharArray();
char[] ch2 = t.toCharArray();
for(int i = 0; i < ch1.length; i ++){
if(ch1[i] != '#'){
deq1.offerFirst(ch1[i]);
}else if(!deq1.isEmpty()){
deq1.pollFirst();
}
}
for(int j = 0; j < ch2.length; j ++){
if(ch2[j] != '#'){
deq2.offerFirst(ch2[j]);
}else if(!deq2.isEmpty()){
deq2.pollFirst();
}
}
while(!deq1.isEmpty() && !deq2.isEmpty()){
char c1 = deq1.pollFirst();
char c2 = deq2.pollFirst();
if(c1 != c2){
return false;
}
}
return deq1.isEmpty() && deq2.isEmpty();
}
}
十、977. 有序數(shù)組的平方
class Solution {
public int[] sortedSquares(int[] nums) {
Deque<Integer> deq1 = new LinkedList<>();
Deque<Integer> deq2 = new LinkedList<>();
for(int i = 0; i < nums.length; i ++){
if(nums[i] <= 0){
deq1.offerLast(nums[i] * nums[i]);
}else{
deq2.offerLast(nums[i] * nums[i]);
}
}
int k = 0;
while(!deq1.isEmpty() && !deq2.isEmpty()){
if(deq1.peekLast() <= deq2.peekFirst()){
nums[k ++] = deq1.pollLast();
}else{
nums[k ++] = deq2.pollFirst();
}
}
while(!deq1.isEmpty()){
nums[k ++] = deq1.pollLast();
}
while(!deq2.isEmpty()){
nums[k ++] = deq2.pollFirst();
}
return nums;
}
}
到了這里,關(guān)于代碼隨想錄二刷day01的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!